在模型中,我定义了多个场景:
public function rules() {
return [
[['in_quantity'], 'required','on'=>['stockIn']],
[['out_quantity'], 'required','on'=>['stockOut']],
];
}是否可以同时使用scenario stockIn和stockOut进行单一模型验证?
$StockModel->scenario[] = 'stockOut';
$StockModel->scenario[] = 'stockIn';或
$StockModel->scenario = ['stockOut','stockIn'];发布于 2019-11-24 04:44:27
模型不能有多个场景。但规则可以有多个场景:
public function rules() {
return [
[['in_quantity'], 'required', 'on' => ['stockIn', 'stockOut']],
[['out_quantity'], 'required', 'on' => ['stockIn', 'stockOut']],
];
}如果模型需要多个场景,这意味着您过度使用了场景功能。
还请注意,不建议在一个模型中使用太多的场景-场景适用于简单的情况,但对于每个场景,更复杂的情况应该由单独的模型处理。
发布于 2019-11-26 19:46:05
如果您使用when扩展规则以进行服务器验证,则可以:
[
['in_quantity'],
'required',
'when' => function ($model) {
return $model->scenario === 'stockIn' || $model->scenario === 'stockOut';
}
]此外,如果您想在表单中进行验证(也称为客户端验证),您还可以使用期望js函数的whenClient:
'whenClient' => "function (attribute, value) {
const scenario = $('#stock-scenario').val()
return scenario === 'stockIn' || scenario = 'stockOut';
}"发布于 2020-03-16 05:15:40
您可以通过这种方式在模型中创建多个场景
class MyModel extends \yii\db\ActiveRecord {
const SCENARIO_CREATE = 'scenario_create';
const SCENARIO_UPDATE = 'scenario_update';
// get scenarios
public function scenarios()
{
return [
self::SCENARIO_CREATE => ['user_id', 'name', 'desc', 'published','date_create'],
self::SCENARIO_UPDATE => ['user_id', 'name', 'desc', 'date_update'],
];
}
public function rules()
{
[['user_id'], 'integer'],
[['name','desc'], 'string', 'max' => 70],
[['date_create', 'date_update'], 'date', 'format' => 'php:Y-m-d H:i:s'],
];
}
}你可以在任何地方使用这种方式
public function actionIndex() {
$model = new MyModel;
$model->scenario = MyModel::SCENARIO_CREATE;
if ($model->load(\Yii::$app->request->post())){
if($model->save()){
// some operations
}
}
}https://stackoverflow.com/questions/59007798
复制相似问题