brantyo

brantyo

阿西吧...

  • 财富值105
  • 威望值0
  • 总积分125

个人信息

  • 回复了 的回答

    你的控制器

    public function actionIndex(){
            
            $model = new LoginForm();
    
                if($model->load(Yii::$app->request->post() && $model->validate())){
                    return $this->redirect(['site/index']);
                }else{
                var_dump(Yii::$app->request->isPost);
                echo "<br>";
                var_dump($model->load(Yii::$app->request->post()));    
                echo "To be continued...";
                }
            
            return $this->render('index',['model' => $model]);
        }
    

    你的loginForm里面没validate();$model->validate()怎么用他呢?

    还有你的loginForm继承model;那么不应该要指明表吗?,建议你继承user表;

    至于你的疑问:继承user表,只要当前写了与被继承的模型一样的函数,只会覆盖,不会有冲突的。

    我追加了个原版的代码,有点仿着写又加了点其他的,不太知道为嘛我的不成功...

  • 这个是原版的LoginForm

    <?php
    namespace common\models;
    
    use Yii;
    use yii\base\Model;
    
    /**
     * Login form
     */
    class LoginForm extends Model
    {
        public $username;
        public $password;
        public $rememberMe = true;
    
        private $_user;
    
    
        /**
         * @inheritdoc
         */
        public function rules()
        {
            return [
                // username and password are both required
                [['username', 'password'], 'required'],
                // rememberMe must be a boolean value
                ['rememberMe', 'boolean'],
                // password is validated by validatePassword()
                ['password', 'validatePassword'],
            ];
        }
    
        /**
         * Validates the password.
         * This method serves as the inline validation for password.
         *
         * @param string $attribute the attribute currently being validated
         * @param array $params the additional name-value pairs given in the rule
         */
        public function validatePassword($attribute, $params)
        {
            if (!$this->hasErrors()) {
                $user = $this->getUser();
                if (!$user || !$user->validatePassword($this->password)) {
                    $this->addError($attribute, 'Incorrect username or password.');
                }
            }
        }
    
        /**
         * Logs in a user using the provided username and password.
         *
         * @return boolean whether the user is logged in successfully
         */
        public function login()
        {
            if ($this->validate()) {
                return Yii::$app->user->login($this->getUser(), $this->rememberMe ? 3600 * 24 * 30 : 0);
            } else {
                return false;
            }
        }
    
        /**
         * Finds user by [[username]]
         *
         * @return User|null
         */
        protected function getUser()
        {
            if ($this->_user === null) {
                $this->_user = User::findByUsername($this->username);
            }
    
            return $this->_user;
        }
    }
    
    

    然后是controller的说

        public function actionLogin()
        {
            if (!Yii::$app->user->isGuest) {
                return $this->goHome();
            }
    
            $model = new LoginForm();
            if ($model->load(Yii::$app->request->post()) && $model->login()) {
                return $this->goBack();
            } else {
                return $this->render('login', [
                    'model' => $model,
                ]);
            }
        }
    

    比较困惑为什么这个可以成功,我的就不行。。

  • 回复了 的回答

    输入正确的用户名和密码没有登录是因为你在你的Controller中没有进行登录操作啊~,不知道在你的loginform中有没有实现login方法,可以参考yii中自带的代码

    那个目前我还只是测试验证转向,还没有要登录操作的说,这样应该可以吧?我的代码除了login方法之外还有其他什么错误么。。

  • 回复了 的回答

    你的控制器

    public function actionIndex(){
            
            $model = new LoginForm();
    
                if($model->load(Yii::$app->request->post() && $model->validate())){
                    return $this->redirect(['site/index']);
                }else{
                var_dump(Yii::$app->request->isPost);
                echo "<br>";
                var_dump($model->load(Yii::$app->request->post()));    
                echo "To be continued...";
                }
            
            return $this->render('index',['model' => $model]);
        }
    

    你的loginForm里面没validate();$model->validate()怎么用他呢?

    还有你的loginForm继承model;那么不应该要指明表吗?,建议你继承user表;

    至于你的疑问:继承user表,只要当前写了与被继承的模型一样的函数,只会覆盖,不会有冲突的。

    这...yii\base\Model::validate()在手册里面,validate()是model自带的函数还是我的理解有误...
    在loginForm里面引用了user的表应该可以吧,那个自带的登录LoginForm也是那样子用啊?

  • 提出了问题
    yii2.0:登录界面提交表格后非正常提示
  • 2016-08-10 已签到
    连续签到1天,获得了5个金钱
  • 2016-05-13 已签到
    连续签到1天,获得了5个金钱
  • 收藏了教程
    yii2.0 下拉菜单
  • 2016-05-07 已签到
    连续签到4天,获得了20个金钱
助理 等级规则
125/200
资料完整度
50/100
用户活跃度
0/100

Ta的关注

2

Ta的粉丝

0

Ta的访客

1