用户提交登录界面,提交用户表格后输出结果非model里面的message匹配内容?
LoginController.php代码如下:
<?php
namespace backend\controllers;
use yii\web\Controller;
use common\models\LoginForm;
use Yii;
class LoginController extends Controller{
public $layout = '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]);
}
}
然后是login/index.php的代码:
<?php
use yii\helpers\Html;
use Yii;
$this->registerCssFile('@web/css/bslogin.css');
?>
<div class="container">
<?=Html::beginForm('','post',['class'=>'form-signin'])?>
<h2 class="form-signin-heading">Please sign in</h2>
<?=Html::activeInput('text',$model,'username',['id'=>'username','class'=>'form-control','placeholder'=>'用户名','autofocus'=>true])?>
<?=Html::error($model,'username')?>
<?=Html::activeInput('password', $model,'password',['id'=>'inputPassword','class'=>'form-control','placeholder'=>'密码'])?>
<?=Html::error($model,'password')?>
<div class="checkbox">
<label>
<input type="checkbox" value="remember-me"> Remember me
</label>
</div>
<?=Html::submitButton('登入',['class'=>'btn btn-lg btn-primary btn-block'])?>
<?=Html::endForm()?>
</div>
最后的就是LoginForm:
<?php
namespace common\models;
use Yii;
use yii\base\Model;
use common\models\User;
class LoginForm extends Model{
public $username;
public $password;
public $rememberMe = true;
public $verification;
private $user;
public function rules(){
return [
[['username','password'],'required','message'=>'{attribute}必须要写入...'],
['username','validateUser'],
];
}
public function validateUser($attribute,$params){
$user = User::findOne(['username'=>$this->$attribute]);
if(!$user){
$this->addError($this->attribute,'貌似有错误了额...');
}
}
}
User Model的部分代码:
public function rules(){
return [
[['username','password','email'],'required','message'=>'{attribute}必须要填写哟,少年'],
['username','unique','message'=>'你落后了一步,{value}已经被占用'],
['email','email','message'=>'非邮箱地址'],
['password','string','min'=>6,'tooShort'=>'密码太短了...呵呵',],
['status','in','range'=>[0,1]],
];
}
清空用户输入后,提交信息,输出两个错误信息(username & password),然后测试只输入用户名不输入密码,还是同样的错误信息,好像用户名那里[输入=没输入]一样。或者全部输入正确用户名及密码,页面也不进行跳转,这是何故?
截图为输入用户命和密码后的输出(控制器添加了var_dump()):
【疑问】引用User模型的rules不会跟LoginForm的rules冲突吧?
你的控制器
你的loginForm里面没validate();$model->validate()
怎么用他呢?
还有你的loginForm继承model;那么不应该要指明表吗?,建议你继承user表;
至于你的疑问:继承user表,只要当前写了与被继承的模型一样的函数,只会覆盖,不会有冲突的。
输入正确的用户名和密码没有登录是因为你在你的Controller中没有进行登录操作啊~,不知道在你的loginform中有没有实现login方法,可以参考yii中自带的代码
LoginForm 的 rules 和 User 的 rules 并没有任何冲突。
你可以理解为
LoginForm 的 rules 是用于登录验证,通常包含用户名密码是否为空,用户名密码是否正确。
User 的 rules 是作用于 注册验证。比如用户名是否为空,长度为何,邮箱是否为空且是否符合格式等等。
唯一的联系就是LoginForm在进行密码校验时会用到User去执行数据库查询。
而你现在遇到的问题基本和User没有任何关系。请检查登录Form所对应的Model也就是LoginForm