Yii2;在" else"中运行的代码首先阻塞,然后在#34之前运行代码;如果"块?

时间:2017-05-26 10:42:11

标签: php if-statement yii yii2 yii2-basic-app

我完全不知道为什么会发生这种情况,大约50%的时间都会发生这种情况。

我检查用户是否存在电子邮件和姓氏,如果存在,则运行一些代码。如果用户不存在,则创建用户,然后运行一些代码。

我已经使用虚拟数据进行了各种测试,即使用户不存在,它也会首先创建它们,但是然后在&#34中运行代码;如果"块。

这就是我所拥有的。

if (User::existsByEmailAndLastName($params->email, $params->lastName)) {
    var_dump('user already exists');
} else {
    User::createNew($params);
    var_dump("Creating a new user...");
}

以下是各自的方法:

public static function existsByEmailAndLastName($email, $lastName) {
    return User::find()->where([
        'email' => $email,
    ])->andWhere([
        'last_name' => $lastName
    ])->one();
}


public static function createNew($params) {

    $user = new User;
    $user->first_name = $params->firstName;
    $user->last_name = $params->lastName;
    $user->email = $params->email;
    $user->address = $params->address;
    $user->address_2 = $params->address_2;
    $user->city = $params->city;
    $user->province = $params->province;
    $user->country = $params->country;
    $user->phone = $params->phone;
    $user->postal_code = $params->postal_code;

    return $user->insert();
}

我试过刷新缓存。我已经使用Yii::$app->db->createCommand()对原始SQL查询进行了尝试,但似乎没有任何效果。我完全难过了。

有没有人知道它为什么会首先创建用户,然后在if语句中进行检查?

使用控制器代码进行编辑:

public function actionComplete() 
{

    if (Yii::$app->basket->isEmpty()) {
        return $this->redirect('basket', 302);
    }

    $guest = Yii::$app->request->get('guest');
    $params = new CompletePaymentForm;
    $post = Yii::$app->request->post();

    if ($this->userInfo || $guest) {

        if ($params->load($post) && $params->validate()) {

            if (!User::isEmailValid($params->email)) {
                throw new UserException('Please provide a valid email.');
            }

            if (!User::existsByEmailAndLastName($params->email, $params->lastName)) {
                User::createNew($params);
                echo "creating new user";
            } else {
                echo "user already exists";
            }

        }

        return $this->render('complete', [
            'model' => $completeDonationForm
        ]);

    }

    return $this->render('complete-login-or-guest');
}

以下是多次尝试后的答案:

传递' ajaxParam'具有ActiveForm小部件的参数,用于定义在请求是ajax请求时将发送的GET参数的名称。我将我的参数命名为" ajax"。

这里是ActiveForm的开头:

$form = ActiveForm::begin([
    'id' => 'complete-form',
    'ajaxParam' => 'ajax'
])

然后我在我的控制器中添加了这个检查:

if (Yii::$app->request->get('ajax') || Yii::$app->request->isAjax) {
    return false;
}

这是一个ajax问题,所以非常感谢Yupik向我指出了这一点(接受他的回答,因为它引导我来到这里)。

2 个答案:

答案 0 :(得分:1)

您可以在模型中进行如下验证:

<select name="programs">
    <option value="1">B.tech CSE</option>
    <option value="2">B.tech IT</option>
</select>

并为姓氏创建/应用相同的功能。

在表单字段中输入email和lastname =&gt; [&#39; enableAjaxValidation&#39; =&GT;真]

在控制器中创建功能

value

答案 1 :(得分:0)

在视图中将'enableAjaxValidation' => false添加到ActiveForm参数中。之所以会发生这种情况,是因为yii向您的操作发送了请求以验证此模型,但在if语句之前未对其进行处理。