Undefined Variable: Model

Bonjour tout le monde,

tout d’abord je suis un nouveau utilisateur de frameword Yii. J’ai commencé à l’utiliser ça fait 10 jours.

Bref, J’ai intégrer l’extension “bootstrap” dans mon projet.

Je voudrais ajouter le widget (voir le code) dans la page index.php de mon veiw.

voilà le code de mon view/site/index.php :


<?php

/* @var $this SiteController */


$this->pageTitle=Yii::app()->name;

?>




<?php $this->widget('bootstrap.widgets.TbBreadcrumbs', array(

    'links'=>array('Library'=>'#', 'Data'),

)); ?>


<?php /** @var BootActiveForm $form */

//$model = new verticalForm;

$form = $this->beginWidget('bootstrap.widgets.TbActiveForm', array(

    'id'=>'verticalForm',

    'htmlOptions'=>array('class'=>'well'),

)); ?>

 

<?php echo $form->textFieldRow($model, 'textField', array('class'=>'span3')); ?>

<?php echo $form->passwordFieldRow($model, 'password', array('class'=>'span3')); ?>

<?php echo $form->checkboxRow($model, 'checkbox'); ?>

<?php $this->widget('bootstrap.widgets.TbButton', array('buttonType'=>'submit', 'label'=>'Login')); ?>

 

<?php $this->endWidget(); ?>

Mais, il m’affiche l’erreur : Undefined variable: model

J’ai pas compris pourquoi ?

Bonjour,

Si tu as ce message, c’est que le contrôleur concerné par ta requête, à priori SiteController, ne t’envoie pas de variable $model lors de l’appel à sa fonction render. Normalement, dans le fichier controller/SiteController, tu devrais avoir une fonction actionLogin (j’extrapole, tout dépend de l’URL demandée) qui contient à la fin :




$this->render('login', array(

    'model' => $model,

);



Ce code permet d’appeler la vue login en lui passant la variable $model afin qu’elle puisse peupler ton formulaire.

Et comment faire pour résoudre le problème ?

Merci beaucoup !

Je ne peux que te conseiller de lire le guide, notamment concernant les formulaires : http://www.yiiframework.com/doc/guide/1.1/fr/form.overview

Sinon, basiquement : visiblement tu es en train de réaliser un formulaire de login. Tu vas donc devoir utiliser un modèle de formulaire afin de gérer les inputs de ce formulaire (login, mot de passe, se souvenir de moi, …).

C’est ce qui est représenté par la variable $model. Une fois ce modèle créé, tu vas l’instancier dans ton contrôleur, puis tu vas le passer à la vue comme je l’ai précisé précédemment, via la fonction render. Le widget TbActiveForm va lier ce modèle à ton formulaire HTML afin de transmettre les informations lors de la soumission, mais aussi conserver les données déjà saisies si une erreur de validation survient.

Edit : Je ne sais pas si tu utilises l’extension Yii-bootstrap, mais dans ce cas je te conseille d’utiliser plutôt l’extension YiiBooster qui est une très bonne intégration du bootstrap Twitter (elle contient les widgets de Yii-bootstrap) et qui est encore plus complète.

Merci bcp, c’est régler ! :)