Bonjour,
Je me suis résigné à demander le l'aide.
Voilà mon probleme.
Je suis actuellement en train de faire les tuto sur la POO en PHP et j'ai fini la partie MVC à savoir la vidéo 20
Sauf que voila je vais sur la page d'administration des catégories et je clique ajouter une catégorie PHP me renvoie une erreur et me dis que la variable $form n'existe pas.
Voici l'erreur renvoyé par PHP :
( ! ) Notice: Undefined variable: form in C:\wamp\www\Exo PHP\Tp Blog\Partie 11-En cours\app\Views\admin\categories\edit.php on line 2
Or $form est une instance déclaré dans le controleur.
$form est déclaré à la ligne 41.
<?php
namespace App\Controller\Admin;
use \Core\HTML\BootstrapForm;
/**
*
*/
class CategoriesController extends AppController{
public function __construct(){
parent::__construct();
$this->loadModel('Category');
}
public function index(){
$items = $this->Category->all();
$this->render('admin.categories.index', compact('items'));
}
public function add(){
if(!empty($_POST)){
$result = $this->Category->create(['titre' => $_POST['titre']]);
return $this->index();
}
$this->render('admin.categories.edit', compact('form'));
}
public function edit(){
if(!empty($_POST)){
$result = $this->Category->update($_GET['id'], ['titre' => $_POST['titre']]);
return $this->index();
}
$category = $this->Category->find($_GET['id']);
$form = new BootstrapForm($category);
$this->render('admin.categories.edit', compact('form'));
}
public function delete(){
if(!empty($_POST)){
$result = $this->Category->delete($_POST['id']);
return $this->index();
}
}
}
Et voici le code de la la partie vue :
<form method="post">
<?= $form->input('titre', 'Titre de la catégorie'); ?>
<button class="btn btn-primary">Sauvegarder</button>
</form>
Si quelqu'un pouvait m'aider à résoudre ce problème ça serait génial.
Bonjour.
Or $form est une instance déclaré dans le controleur.
Tu te trompes grandement là, ce n'est pas parce que tu fais un use
dans ton controleur, que ta classe est instanciée, de plus, même si tu l'instancie dans ton controleur, ça ne veut pas dire qu'elle sera accessible au niveau de ta vue.
Dans ta fonction edit, tu l'instancies correctement et tu envoies la variable qui la contient à ta vue, alors que dans ta fonction add, tu ne l'instancies pas, tu ne fais qu'envoyer une variable à la vue qui par conséquent est nul
.
Salut,
si tu mets un peu de debugage dans la fonction edit, comme ceci, est-ce que tu vois quelquchose d'anormal ?
public function edit(){
if (!empty($_POST)){
$result = $this->Category->update($_GET['id'], ['titre' => $_POST['titre']]);
return $this->index();
}
var_dump($_GET['id']);
$category = $this->Category->find($_GET['id']);
var_dump($category);
$form = new BootstrapForm($category);
echo '<pre>';
print_r($form);
echo '</pre>';
$this->render('admin.categories.edit', compact('form'));
}
PS : Dans cette fonction, tu regarde si $_POST
n'est pas vide, et si oui tu l'utilise, mais tu utilise
AUSSI $_GET
dans ce même if
, ça me parait étrange, est-ce que ça fonctionne ?
Un grand merci a tous les deux. effectivement j'avais instancié mon objet dans la methode edit() mais pas dans la méthode add().
Halala faire du code a 1:00 du matin ça rend fou. Maintenant je crois que je vais m'arreter à partir de 22:00. Fini le code jusqu'à 2:00 du matin.