brantyo
你的控制器
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表,只要当前写了与被继承的模型一样的函数,只会覆盖,不会有冲突的。
我追加了个原版的代码,有点仿着写又加了点其他的,不太知道为嘛我的不成功...
- brantyo 回答了问题 yii2.0:登录界面提交表格后非正常提示
这个是原版的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, ]); } }
比较困惑为什么这个可以成功,我的就不行。。
你的控制器
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也是那样子用啊?- brantyo 2016-08-10 已签到连续签到1天,获得了5个金钱
- brantyo 2016-05-13 已签到连续签到1天,获得了5个金钱
- brantyo 收藏了教程yii2.0 下拉菜单
- brantyo 2016-05-07 已签到连续签到4天,获得了20个金钱