Yii2:如何避免视图中的必填字段?

时间:2017-10-30 14:29:17

标签: validation model yii2 required-field

我有一个关于假期的观点,用户使用表格来选择旅行的地方和酒店。它有两种模式: HolidaysPlaces HolidaysHotels

用户必须使用以下视图按此顺序填写表单:

  1. 用户填写名为Place and City的字段(与 HolidaysPlaces模型相关)。
  2. 如果用户想要选择酒店,则选中复选框。它有一个名为Hotel的字段(与 HolidaysHotels模型相关)。
  3. 用户填写该字段。
  4. 用户按下“创建”按钮。
  5. 控制器接收并保存两个模型。
  6. 但问题是当用户没有选中复选框(列表的第2个)时:酒店字段仍为required(其模型文件中定义的红色星号)。因此,在这种情况下,“创建”按钮不起作用。

    如何禁用所需功能?

    enter image description here

3 个答案:

答案 0 :(得分:1)

在HolidaysHotels模型中添加此案例的方案,并仅包含要检查的字段。

示例:如果您有3个字段名称,日期和年龄,则仅创建两个方案,并在控制器中设置方案。只会检查这两个字段。

模特:

public function scenarios(){
$scenarios = parent::scenarios();
$scenarios['create'] = ['name', 'date'];
return $scenarios;
}

在控制器中:

$holiday = new HolidayHotels();
$holiday->scenario = 'create';

了解有关方案的更多信息:http://www.yiiframework.com/doc-2.0/guide-structure-models.html#scenarios

答案 1 :(得分:0)

您可以在模型规则中添加一些基于条件的验证。以下是客户端和服务器验证的代码段。您可以在功能块内部使用许多条件。

['field-1', 'required', 'when' => function ($model) {
    return $model->check_box == '1';
}, 'whenClient' => "function (attribute, value) {
    return $('#checkbox-id').is(':checked') ';
}"],

答案 2 :(得分:0)

解决它的最简单方法是使用空字符串发送模型。然后控制器检查字符串是否为空。如果是,则不保存模型。否则,它就会被保存。

这是对我有用的唯一方式。