[英]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.