Php 登录后,我无法在Yii中重定向用户

Php 登录后,我无法在Yii中重定向用户,php,yii,yii2,Php,Yii,Yii2,我是Yii的新手,所以我决定写一个简单的登录脚本来测试我到目前为止学到的东西 由于某些原因,我的代码不能正常工作 理想情况下,如果用户名和密码存在,它应该重定向到索引视图,如果不存在,它也应该重定向到登录视图 如果用户名和密码存在,它会按照应该的方式重定向,并且还会显示正确的会话值,但是如果用户名和密码不存在,我也会得到相同的结果 知道我做错了什么吗 这是我的控制器代码: <?php namespace app\controllers; use app\models\Users; us

我是Yii的新手,所以我决定写一个简单的登录脚本来测试我到目前为止学到的东西

由于某些原因,我的代码不能正常工作

理想情况下,如果用户名和密码存在,它应该重定向到索引视图,如果不存在,它也应该重定向到登录视图

如果用户名和密码存在,它会按照应该的方式重定向,并且还会显示正确的会话值,但是如果用户名和密码不存在,我也会得到相同的结果

知道我做错了什么吗

这是我的控制器代码:

<?php

namespace app\controllers;

use app\models\Users;
use Yii;

class UsersController extends \yii\web\Controller
{
    public function actionIndex()
    {

        $model = new users();
        return $this->render('login', [
                'model' => $model,
            ]);
    }

    public function actionLogin()
    {
        $model = new Users();
        if ($model->load(Yii::$app->request->post())) {
                // form inputs are valid, do something here
               $request = Yii::$app->request;
               $form_values = $request->post('Users');
               //var_dump($form_values['email']); exit;
               //echo $form_values['email'];
               if($model !==NULL){
                    $model = $model->doLogin($form_values['email'],$form_values['password']);
                    $session = Yii::$app->session;
                    $session->setFlash('login', 'Login succesful.');
                    return $this->render('index', [
                        'model' => $model,
                    ]);
                }

                elseif($model === NULL){

                    $session = Yii::$app->session;
                    $session->setFlash('login', 'Invalid Login.');
                    return $this->render('login', [
                        'model' => $model,
                    ]);
                }
        }

    }
}

这是因为您的条件没有意义,而您的
else
分支是一个死代码

首先初始化
$model
变量:

$model = new Users();
然后,您的测试如果不是
null

if($model !==NULL){
它将始终返回
true
,因为您已初始化此变量以包含
用户
模型,所以它不可能为
。您可能应该有如下内容:

class UsersController extends \yii\web\Controller {

    public function actionIndex() {
        $model = Users::findOne(Yii::$app->user->id);
        return $this->render('index', [
            'model' => $model,
        ]);
    }

    public function actionLogin() {
        $model = new Users();
        if ($model->load(Yii::$app->request->post()) && $model->login()) {
            Yii::$app->session->setFlash('login', 'Login successful.');
            return $this->redirect(['index']);
        }

        return $this->render('login', [
            'model' => $model,
        ]);
    }
}

并在
Users::login()方法中处理登录(验证用户名和密码)。请参见中的示例。

Okay@rob006请问我的else分支是如何死代码的?我需要一个,因为我需要让用户知道登录是否成功。@Chi你的else是一个死代码,因为如果
$model===NULL
,它将永远不会通过
$model->load()
,并将抛出异常,因此它永远不会执行感谢@MuhammadOmerAslam我更新了我的操作登录,这就是我目前拥有的:@Chi你可以使用roob006发布的这个答案,它应该在你的电脑中正常工作case@MuhammadOmerAslam我可能错了,但如果用户不存在,我看不到他在哪里解决了这个问题。如果用户不存在,它也应该给出一个错误。