Partage
  • Partager sur Facebook
  • Partager sur Twitter

Router PHP MVC ne traite pas les variables $_POST

    22 mai 2019 à 14:25:02

    Bonjour à tous,j'ai créé une architecture MVC assez simple pour un projet en PHP, je débute sur
    l'utilisation du MVC et j'ai voulu créer un Router avec une réécriture d'Url.
    Cependant, comme expliqué dans le titre mes traitements de formulaire ne fonctionnent plus.
    Une fois le formulaire sousmis, j'ai un message d'erreur qui me dit qu'aucun n'argument n'a été passé dans la fonction de
    mon Controller.

    Voici mon .htaccess

    RewriteEngine On
    
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    
    RewriteCond %{REQUEST_METHOD} !POST [NC]
    RewriteCond %{SERVER_PORT} ^80$
    
    RewriteRule ^(.*)$ index.php?url=$1 [QSA,L]

    Ma class App qui correspond à mon router :

    <?php
    
        class AppController {
    
            protected $controller = 'homeController';
            protected $method = 'index';
            protected $params = [];
            protected $post;
    
            public function __construct($post = null){
    
                $url = $this->parseUrl();
    
                if (file_exists('./Controllers/'.$url[0].'Controller.php')) {
                    
                    $this->controller = $url[0].'Controller';
    
                    if (!empty($_POST)) {
                        $this->post = $post;
                    }
                } 
    
                $this->controller = new $this->controller;
    
                if (isset($url[1])) {
    
                    if (method_exists($this->controller, $url[1])) {
    
                        $this->method = $url[1];
                    }
                }
    
                if (isset($url[2])) {
                    unset($url[0]);
                    unset($url[1]);
                    $this->params = array_values($url);
                }
    
                if (!empty($this->post)) {
                    call_user_func_array([$this->controller, $this->method], $this->post);
                }
                
                if (!empty($params)) {
                    call_user_func_array([$this->controller, $this->method], $this->params);
                } else {
                    call_user_func([$this->controller, $this->method]);
                }
    
            }
    
            public function parseUrl(){
    
                if (isset($_GET['url'])) {
    
                    $url = explode('/', filter_var(rtrim($_GET['url'], '/'), FILTER_SANITIZE_URL));
    
                    return $url;
                }
            }
        }

    Mon fichier index :

        if (!empty($_POST)) {
            $app = new AppController($_POST);
        } else {
            $app = new AppController();
        }
    

     Et enfin la fonction de mon controller :

     public function connectUser($post){
    
                
                if (!empty($post['email']) && !empty($post['password'])) {
    
                    $userExists = $this->_model->connectUser($post['email'], $post['password']);
    
                    if (ctype_digit($userExists)) {
    
                        $idUser = $userExists;
        
                        $user = $this->_model->readOne($idUser);
        
                        $user = new User($user);
    
                        $_SESSION['projet']['userId'] = $user->getId();
    
                        header('Location:User/myProfile/'.$_SESSION['projet']['userId']);
                        exit();
        
                    } else {
    
                        $msg = $userExists;
                    }
    
                } else {
                    $msg = 'Veuillez remplir tous les champs';
                }
                header('Location:User/connexion/'.$msg);
                exit();
            }
    
    

    Le chemin dans mon formulaire est celui-ci :

    action="User/connectUser/"

    Si dans mon htaccess si j'enlève ces deux lignes :

    RewriteCond %{REQUEST_METHOD} !POST [NC]
    RewriteCond %{SERVER_PORT} ^80$

    L'erreur est celle-ci Fatal error: Uncaught ArgumentCountError: Too few arguments to function UserController::connectUser(), 0 passed in C:\xampp\htdocs.

    En revanche avec ces deux lignes j'ai une erreur 404..

    Voilà.. Désolée pour la longueur du message mais j'ai tenté pas mal de choses après avoir fouillé sur internet et dans les forums mais je n'arrive pas à régler mon problème..

    -
    Edité par Jado1 22 mai 2019 à 14:27:29

    • Partager sur Facebook
    • Partager sur Twitter
      22 mai 2019 à 14:41:52

      salut,

      il y a une erreur L18. tu vérifies $_POST mais tu envoies $post.

      • Partager sur Facebook
      • Partager sur Twitter
      Winter Is Coming - Explorez le forum : votre problème a déjà dû être traité ailleurs
        22 mai 2019 à 14:47:49

        Ah oui effectivement merci, j'ai réglé le soucis mais le problème reste exactement le même..

        j'ai modifié :

        if(!empty($post)){
        $this->post=$post;
        }

        -
        Edité par Jado1 22 mai 2019 à 14:49:00

        • Partager sur Facebook
        • Partager sur Twitter
          23 mai 2019 à 17:31:58

          Salut,

          J'ai juste une question.

          Tu créées un contrôleur AppController avec $post en paramètre, mais où est appelé ConnectUser? S'il attend  un paramètre, est tu sûr d'avoir bien mis celui-ci quand tu appelles ta fonction?  

          • Partager sur Facebook
          • Partager sur Twitter

          Router PHP MVC ne traite pas les variables $_POST

          × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
          × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
          • Editeur
          • Markdown