validation - Yii2 自定义验证器未按指南建议工作

标签 validation module yii2 models yii2-advanced-app

我今天在这里搜索了一段时间,但我无法理解为什么我的验证器不能在我的模型中工作。

我在下面的代码中有一个带有模型“页面”的模 block 。

我有 2 个属性需要用来验证模型。它们是 hero_link 和 hero_linked。如果 hero_linked 为真,我想要求 hero_link。

在指南here ,他们解释了这种验证器的正确语法

我在我的模型中使用了这个语法,但它没有像我期望的那样验证。我还添加了 whenClient 属性,所以我可以在这里使用客户端验证。

我的相关代码如下:

// Page model
namespace common\modules\page\models;

use Yii;

class Page extends \yii\db\ActiveRecord
{
    public function rules()
    {
        return [
            [['hero_linked',], 'boolean'],
            [['hero_linked',], 'required'],
            [['hero_link',], 'string', 'max' => 255],
            [
                'hero_link', 
                'required', 
                'when' => function($model) {
                    return $model->hero_linked == true;
                },
                'whenClient' => "function (attribute, value) {
                    return $('#page-hero_linked').val() == '1';
                }",
            ],
        ];
    }
}

// _form view 
<?php $form = ActiveForm::begin(); ?>
    <?= $form->field($model, 'hero_linked')->checkbox() ?>
    <?= $form->field($model, 'hero_link')->textInput(['maxlength' => 255]) ?>
<?php ActiveForm::end(); ?>

正确应用了所需的验证器,但它似乎忽略了 when 属性,并且即使未选中我的复选框也需要。我的语法不正确,还是我遗漏了一个要求?任何帮助表示赞赏,提前致谢!

最佳答案

我想这就是你想要的。
首先使用输入字段的whenClient 中的属性“checked”来获取复选框是否被选中。

复选框的隐藏字段不是问题。

hero_linked(复选框)中的 whenClient 用于在复选框更改时验证 hero_link(文本输入)字段。
因此,您可以立即查看是否需要 hero_link(文本输入)。

如果使用此规则,则表单中不需要任何额外的 js 代码。

但是正如您可能还看到的,由于完整的名称“page-something”,这实际上仅适用于“page”模型,我猜也取决于表单名称。因此,您应该对 form.php 中的两个字段使用其他一些固定的“id”,这样如果您将页面模型扩展到另一个类,这也将起作用。

[
    'hero_linked', 'required',
    'whenClient' => "function (attribute, value) {
        $('form').yiiActiveForm('validateAttribute', 'page-hero_link');
        return true;
    }",
],
[['hero_link',], 'string', 'max' => 255],
[
    'hero_link', 'required', 'when' => function ($model) {
        return $model->hero_linked == true;
    },
    'whenClient' => "function (attribute, value) {
        return $('#page-hero_linked').prop('checked');
    }",
],

关于validation - Yii2 自定义验证器未按指南建议工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29888182/

相关文章:

validation - 在Grails域中验证ZipCode?

asp.net-mvc - 有没有办法改变验证消息的位置

sql-server - 如何清理(防止SQL注入(inject))SQL Server中的动态SQL?

php - Yii2 301 从原始 url 重定向到 .htaccess 中的 SEO 友好 url 不起作用,需要其他解决方案

Yii2事件记录查询数组中的多个where子句

php - Yii2-SQLSTATE[42000] : Syntax error or access violation: 1064 on insert batch

javascript - Chrome 模式输入验证上的正则表达式

perl - 如何根据可用的模块动态包含模块?

module - 如何访问传递给 ColdBox 模块的事件参数?

php - 正在寻找有关编写 PHP 模块的教程?