簡體   English   中英

方案無法使用Yii 2進行表單驗證

[英]Scenario not working on form validation with Yii 2

Yii 2使用基於AJAX的表單,除針對特定場景定義的單個規則外,其他一切工作正常。 如果我將該字段留空,則可以通過驗證,但不可以。

JS:

$(document).ready(function() {

    /* Processes the company signup request */

    $('#company_form').submit(function(e) {

        // The below helps stop double submits caused by submitting via ajax
        e.preventDefault();
        e.stopImmediatePropagation();

        // Sign them up
        signup('company');

        return false;

    });

})

function signup(type) {

    var url;
    var type2;
    var field;
    var form_id;

    // Set file to get results from..

    switch (type) {
        case 'company':
            url = '/site/company-signup';
            form_id = 'company_form';
            type2 = type;
            break;
        case 'client':
            url = '/site/client-signup';
            form_id = 'client_form';
            type2 = type;
            break;
    }

    // Set parameters
    var dataObject = $('#' + form_id).serialize();

    // Run request  

    getAjaxData(url, dataObject, 'POST', 'json')

        .done(function(response) {

            if (response.result) {

                //......

            } else {

                //.......

            }

        })

        .fail(function() {

            //.....

        });

    // End

}

function getAjaxData(loadUrl, dataObject, action, type) {

    return jQuery.ajax({
        type: action,
        url: loadUrl,
        data: dataObject,
        dataType: type
    });    

}

我的控制器代碼:

$signup = new SignupForm(['scenario' => 'company']);

if (Yii::$app->request->isAjax) {

    if ($signup->load(Yii::$app->request->post()) and $signup->validate()) {

        //.......

    } else {

        //.......

    }

    // Output response
    echo json_encode($data);

}

型號代碼:

private $db;
public $company_name;
public $first_name;
public $last_name;
public $email;
public $username;
public $password;
public $password_again;

/**
 * Validation rules
 * @return array An array of validation rules
 */ 

public function rules() {       
    return [
        // Format some data
        [['company_name', 'first_name', 'last_name', 'email', 'username', 'password', 'password_again'], 'trim'],
        ['username', 'filter', 'filter' => 'strtolower'],
        [['company_name', 'first_name', 'last_name', 'email', 'username', 'password', 'password_again'], 'sanitize'],           
        // If company scenario, require company name
        ['company_name', 'required', 'on' => 'company'],
        // Require all other fields
        [['first_name', 'last_name', 'email', 'username', 'password', 'password_again'], 'required'],

        //......

}

如您所見,如果我們處於company情景中,則第四company_name則應要求company_name字段,但並非如此。

我在這里做錯了什么?

但是在第1條規則中,您具有不在方案中的“ company_name”字段。 你為什么用這個?

公共功能場景(){...}

好的,解決了。 不知道這是否是Yii錯誤,但是:

$signup = new SignupForm(['scenario' => 'company']);

這本身是行不通的。 如果要這樣做,那么您的模型中需要這樣的東西:

function __construct($config) {
    $this->scenario = $config['scenario'];
}

...或者您可以執行以下操作:

$signup = new SignupForm();
$signup->scenario = 'company';

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM