Bonjour,

J'ai un problème lors de la redirection de la fonction admin_delete. Lorsque je veux supprimer un article sur la page admin_index.php, j'obtiens le bon url : http://localhost/Tutoriels/site/cockpit/posts/delete/3. Cependant j'ai une erreur : Warning: require(C:\wamp\www\Tutoriels\site\view\posts\admin_delete.php). Il recherche donc une vue et non une fonction dans le controller.

Voilà si quelqu'un pourrait m'éclairer, merci

4 réponses


A la fin de ta fonction admin_delete fait un $this->redirect('site/cockpit/posts/index'); et ça devrait régler le soucis ;) . Si tu mets une fonction dans le controller principal elle sera bien considérée comme fonction, si tu la mets dans un sous-controller (Posts/Medias etc...) la fonction sera en quelques sortes éxécutés comme une vue. Ce qui fait que lorsque tu demandes de faire la fonction on te renvoie sur la vue admin_delete qui n'existe pas ainsi en faisant une redirection tu n'auras plus ce soucis puisque tu seras à la fin de la fonction redirigé vers la page d'accueil.

Hélas j'ai bien essayé ceci mais toujours la même erreur. L'erreur viendrait de la ligne : require($view); dans la fonction render de Controller.php.

Copie et colle ta fonction render alors ^^

Voici ma fonction delete:

/** Permet de supprimer un article
                    **/ 
                    function admin_delete($id){
                        $this->loadModel('Post');
                        $this->Post->delete($id);
                        $this->Session->setFlash('Le contenu a bien été supprimé.');
                        $this->redirect('admin/pages/index');}

Voici ma fonction render :

public function render($view){
            if($this->rendered){return false;}
            extract($this->vars);
            if(strpos($view,'/')===0){
                $view = ROOT.DS.'view'.$view.'.php';
            }else{
                $view = ROOT.DS.'view'.DS.$this->request->controller.DS.$view.'.php';
            }
            ob_start();
            require($view);
            $content_for_layout = ob_get_clean();
            require ROOT.DS.'view'.DS.'layout'.DS.$this->layout.'.php';
            $this->rendered=true;
        }