谁一开始就是大神?

yii2.0:登录界面提交表格后非正常提示[2.0]

用户提交登录界面,提交用户表格后输出结果非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;

//http://www.yiiframework.com/doc-2.0/guide-output-client-scripts.html
$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;
    //登录返回用户信息来储存,用于后面的session,cookies等
    
    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

赞(0) 打赏
未经允许不得转载:菜鸟之家 » yii2.0:登录界面提交表格后非正常提示[2.0]

评论 抢沙发

登录

找回密码

注册