Застрял с учебником Yii Framework Form - PullRequest
2 голосов
/ 02 марта 2012

Я продолжаю читать это руководство по фреймворку Yii снова и снова Yii Framework - Работа с формой

Я уже создал свою модель со следующими кодами

class LoginForm extends CFormModel{
    public $username;
    public $password;
    public $rememberMe = false;

    private $_identity;

    public function rules(){
        return array(
            /* array(<field>,<field>,<function to invoke>)
            * functions required and boolean are built-in validators of the yii framework.
            * you can invoke your own function by defining your own function
            */
            array('username','password','required'),
            array('rememberMe','boolean'),
            array('password','authenticate'),
        );
    }

    public function authenticate(){
        $this->_identity = new UserIdentity($this->username,$this->password);
        if(!$this->_identity->authenticate()){
            $this->addError("password","Incorrect Username or Password");
        }
    }

    public function attributeLabels(){
        return array(
            'username'=>"Username",
            'password'=>"Password",
            'rememberMe'=>"Remember Me",
        );
    }
}

и моя функция Action с этими кодами в моем контроллере

 public function actionLogin(){
        //calls the Login Model that will be used in this action
        $model = new LoginForm;
        if(isset($_POST["LoginForm"])){
            //collects user input
            $model->attributes = $_POST["LoginForm"];
            //validates user input using the model rules and redirects back to
            //previous page when user input is invalid
            if($model->validate()){
               $this->redirect(Yii::app()->user->returnUrl);   
            }
            //redisplay the login form
            $this->render('login',array('loginModel'=>$model));
        }
    }

и, наконец, в моем представлении

<div class="form">
<?php
    $formlogin = $this->beginWidget('CActiveForm');     
    echo $formlogin->errorSummary($model);
?>
       <div class="row">
       <?php
            $formlogin->label($model,'username');
            $formlogin->textField($model,'username');
       ?>
       </div>
       <div class="row">
       <?php
            $formlogin->label($model,'password');
            $formlogin->passwordField($model,'password');
       ?>
       </div>
       <div class="row rememberMe">
       <?php
            $formlogin->checkBox($model,'rememberMe');
            $formlogin->label($model,'rememberMe');
       ?>
       </div>
       <div class="row submit">
       <?php
            echo CHtml::submitButton('Login');
       ?>
       </div>
<?php 
$this->endWidget();
?>
</div>

, и я всегда появлялся с этой ошибкой в ​​моем представлении D: \ xampp\ htdocs \ wiltalk \ protected \ views \ sandbox \ index.php (11)

Неопределенная переменная: модель

я что-то пропустил?пожалуйста, дайте мне знать ... Я знаю, что это довольно просто, но я новичок в использовании таких основанных на компонентах сред MVC .... Спасибо

Ответы [ 2 ]

2 голосов
/ 02 марта 2012
public function actionLogin(){
        //calls the Login Model that will be used in this action
        $model = new LoginForm;
        if(isset($_POST["LoginForm"])){
            //collects user input
            $model->attributes = $_POST["LoginForm"];
            //validates user input using the model rules and redirects back to
            //previous page when user input is invalid
            if($model->validate()){
               $this->redirect(Yii::app()->user->returnUrl);   
            }            
        }
        //redisplay the login form
        $this->render('login',array('model'=>$model));
    }

Ваш код был неверным.Внесите эти изменения в свой код.

  1. Вы используете переменную модели и передаете переменную loginModel.
  2. Вы отображаете файл представления на POST.
1 голос
/ 02 марта 2012

Это всего лишь выстрел в темноте ...

Для вашего контроллера public function actionLogin(){ добавьте return $model; в конце.
Добавьте <?php $model = actionLogin(); ?> в верхнюю часть экрана.

Проблема в том, что вы не устанавливаете $model где-либо в своем представлении, но ваш контроль устанавливает его. Вы должны найти способ передать значение $model, установленное в вашем контроле, обратно на ваш взгляд.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...