1

我对假期有一个看法,其中用户使用表单来选择旅行地点和酒店。它有两个模型:HolidaysPlacesHolidaysHotels

用户必须使用视图按此顺序填写表格:

  1. 用户填写名为 Place 和 City 的字段(与HolidaysPlaces 模型相关)。
  2. 如果他/她想选择酒店,用户选中了一个复选框。它有一个名为 Hotel 的字段(与HolidaysHotels 模型相关)。
  3. 用户填写该字段。
  4. 用户按下创建按钮。
  5. 控制器接收并保存两个模型。

但问题是当用户没有选择复选框(列表的第 2 位)时:Hotel 字段仍然存在required(带有在其模型文件中定义的红色星号)。因此,在这种情况下,创建按钮不起作用。

如何禁用所需的功能?

在此处输入图像描述

4

3 回答 3

2

在您的 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

于 2017-10-30T14:49:02.803 回答
0

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

['field-1', 'required', 'when' => function ($model) {
    return $model->check_box == '1';
}, 'whenClient' => "function (attribute, value) {
    return $('#checkbox-id').is(':checked') ';
}"],
于 2017-10-31T06:31:27.863 回答
0

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

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

于 2017-11-02T17:58:23.167 回答