Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/226.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何在yii框架下使用登录表单进行身份验证_Php_Authentication_Login_Yii_Syntax Error - Fatal编程技术网

Php 如何在yii框架下使用登录表单进行身份验证

Php 如何在yii框架下使用登录表单进行身份验证,php,authentication,login,yii,syntax-error,Php,Authentication,Login,Yii,Syntax Error,朋友们好,我是yii框架的初学者,我想创建带有身份验证的登录表单,但我有以下错误: 致命错误:在第47行的C:\xampp\htdocs\pro\u C\protected\components\UserIdentity.php中调用未定义的方法User::model() public function authenticate() { $users = User::model()->findByAttributes(array('username'=>$

朋友们好,我是yii框架的初学者,我想创建带有身份验证的登录表单,但我有以下错误:

致命错误:在第47行的C:\xampp\htdocs\pro\u C\protected\components\UserIdentity.php中调用未定义的方法User::model()

    public function authenticate()
    {


    $users = User::model()->findByAttributes(array('username'=>$this->username));


            if(!isset($users[$this->username]))
                    $this->errorCode=self::ERROR_USERNAME_INVALID;
            elseif($users[$this->username]!==$this->password)
                    $this->errorCode=self::ERROR_PASSWORD_INVALID;
            else
                    $this->errorCode=self::ERROR_NONE;
            return !$this->errorCode;
      }
   }

    ?>
UserIdentity.php
    public function authenticate()
    {


    $users = User::model()->findByAttributes(array('username'=>$this->username));


            if(!isset($users[$this->username]))
                    $this->errorCode=self::ERROR_USERNAME_INVALID;
            elseif($users[$this->username]!==$this->password)
                    $this->errorCode=self::ERROR_PASSWORD_INVALID;
            else
                    $this->errorCode=self::ERROR_NONE;
            return !$this->errorCode;
      }
   }

    ?>
UserController.php
    class UserController extends Controller
    {

    public function actionIndex()
    {
            // renders the view file 'protected/views/site/index.php'
            // using the default layout 'protected/views/layouts/main.php'
            $this->render('index');
    }


    public function actionLogin()
    {
            $model=new User;


            if(isset($_POST['User']))
            {
                    $model->attributes=$_POST['User'];
                    // validate user input and redirect to the previous page if valid
                    if($model->validate() && $model->login())
                            $this->redirect(Yii::app()->user->returnUrl);
            }
            // display the login form
            $this->render('login',array('model'=>$model));
    }


    public function actionLogout()
    {
            Yii::app()->user->logout();
            $this->redirect(Yii::app()->homeUrl);
    }
   }
  ?>
    /**
      * LoginForm class.
      * LoginForm is the data structure for keeping
      * user login form data. It is used by the 'login' action of 'SiteController'.
      */
    class User extends CFormModel
    {
    public $username;
    public $password;
    public $rememberMe;

    private $_identity;

    /**
     * Declares the validation rules.
     * The rules state that username and password are required,
     * and password needs to be authenticated.
     */
    public function rules()
    {
            return array(
                    // username and password are required
                    array('username, password', 'required'),
                    // rememberMe needs to be a boolean
                    array('rememberMe', 'boolean'),
                    // password needs to be authenticated
                    array('password', 'authenticate'),
            );
    }

    /**
     * Declares attribute labels.
     */
    public function attributeLabels()
    {
            return array(
                    'rememberMe'=>'Remember me next time',
            );
    }

    /**
     * Authenticates the password.
     * This is the 'authenticate' validator as declared in rules().
     */
    public function authenticate($attribute,$params)
    {
            if(!$this->hasErrors())
            {
                    $this->_identity=new UserIdentity($this->username,$this->password);
                    if(!$this->_identity->authenticate())
                            $this->addError('password','Incorrect username or password.');
            }
    }

    /**
     * Logs in the user using the given username and password in the model.
     * @return boolean whether login is successful
     */
    public function login()
    {
            if($this->_identity===null)
            {
                    $this->_identity=new UserIdentity($this->username,$this->password);
                    $this->_identity->authenticate();
            }
            if($this->_identity->errorCode===UserIdentity::ERROR_NONE)
            {
                    $duration=$this->rememberMe ? 3600*24*30 : 0; // 30 days
                    Yii::app()->user->login($this->_identity,$duration);
                    return true;
            }
            else
                    return false;
    }
   }
  ?>
User.php
    /**
      * LoginForm class.
      * LoginForm is the data structure for keeping
      * user login form data. It is used by the 'login' action of 'SiteController'.
      */
    class User extends CFormModel
    {
    public $username;
    public $password;
    public $rememberMe;

    private $_identity;

    /**
     * Declares the validation rules.
     * The rules state that username and password are required,
     * and password needs to be authenticated.
     */
    public function rules()
    {
            return array(
                    // username and password are required
                    array('username, password', 'required'),
                    // rememberMe needs to be a boolean
                    array('rememberMe', 'boolean'),
                    // password needs to be authenticated
                    array('password', 'authenticate'),
            );
    }

    /**
     * Declares attribute labels.
     */
    public function attributeLabels()
    {
            return array(
                    'rememberMe'=>'Remember me next time',
            );
    }

    /**
     * Authenticates the password.
     * This is the 'authenticate' validator as declared in rules().
     */
    public function authenticate($attribute,$params)
    {
            if(!$this->hasErrors())
            {
                    $this->_identity=new UserIdentity($this->username,$this->password);
                    if(!$this->_identity->authenticate())
                            $this->addError('password','Incorrect username or password.');
            }
    }

    /**
     * Logs in the user using the given username and password in the model.
     * @return boolean whether login is successful
     */
    public function login()
    {
            if($this->_identity===null)
            {
                    $this->_identity=new UserIdentity($this->username,$this->password);
                    $this->_identity->authenticate();
            }
            if($this->_identity->errorCode===UserIdentity::ERROR_NONE)
            {
                    $duration=$this->rememberMe ? 3600*24*30 : 0; // 30 days
                    Yii::app()->user->login($this->_identity,$duration);
                    return true;
            }
            else
                    return false;
    }
   }
  ?>

当我在UserIdentity中使用此代码时

    $users=array(
        // username => password
        'demo'=>'demo',
        'admin'=>'admin',

    );
返回真值 但是当我使用

     $users = Pi::model()->findByAttributes(array('username'=>$this->username));
将此错误返回给我

     Fatal error: Call to undefined method Pi::model() in C:\xampp\htdocs\pro_c\protected\components\UserIdentity.php on line 47

请帮帮我,您有一个名为User的模型,属于CFormModel类型(它是一个表单模型)。但是您正在尝试访问用于CActiveModel类型的User::model()->FindByatAttributes(数据库模型)。您应该将类用户重命名为其他名称。例如,这里的用户类称为UserIdentity。


您必须对代码进行一些更改才能正常工作。只需查看Yii博客演示,就可以找到正确的方向。

您的代码似乎在正确的路径上,但Yii似乎无法找到用户类

您可以手动导入该类,或者更好的是,使用protected/config/main文件中的“import”指令自动加载该类

这会告诉yii加载受保护的/models/目录中的所有模型,假设User.php类文件位于该目录中

    /**
      * LoginForm class.
      * LoginForm is the data structure for keeping
      * user login form data. It is used by the 'login' action of 'SiteController'.
      */
    class User extends CFormModel
    {
    public $username;
    public $password;
    public $rememberMe;

    private $_identity;

    /**
     * Declares the validation rules.
     * The rules state that username and password are required,
     * and password needs to be authenticated.
     */
    public function rules()
    {
            return array(
                    // username and password are required
                    array('username, password', 'required'),
                    // rememberMe needs to be a boolean
                    array('rememberMe', 'boolean'),
                    // password needs to be authenticated
                    array('password', 'authenticate'),
            );
    }

    /**
     * Declares attribute labels.
     */
    public function attributeLabels()
    {
            return array(
                    'rememberMe'=>'Remember me next time',
            );
    }

    /**
     * Authenticates the password.
     * This is the 'authenticate' validator as declared in rules().
     */
    public function authenticate($attribute,$params)
    {
            if(!$this->hasErrors())
            {
                    $this->_identity=new UserIdentity($this->username,$this->password);
                    if(!$this->_identity->authenticate())
                            $this->addError('password','Incorrect username or password.');
            }
    }

    /**
     * Logs in the user using the given username and password in the model.
     * @return boolean whether login is successful
     */
    public function login()
    {
            if($this->_identity===null)
            {
                    $this->_identity=new UserIdentity($this->username,$this->password);
                    $this->_identity->authenticate();
            }
            if($this->_identity->errorCode===UserIdentity::ERROR_NONE)
            {
                    $duration=$this->rememberMe ? 3600*24*30 : 0; // 30 days
                    Yii::app()->user->login($this->_identity,$duration);
                    return true;
            }
            else
                    return false;
    }
   }
  ?>
// autoloading model and component classes
'import'=>array(
    'application.models.*',
    'application.components.*',
),