【问题标题】:CakePHP 3 - Combining reusable validators for repeated columns in tables?CakePHP 3 - 为表中的重复列组合可重用的验证器?
【发布时间】:2019-11-18 22:36:44
【问题描述】:

目标:我有一个数据库,其中包含许多共享许多列的表。例如,users 表和orders 表都有一组组成地址的四列。与其在每个表的 validationDefault() 函数中重复相同的规则,我宁愿让规则可重用。

Attampt:我看了Book: Creating Reusable Validatorsstackoverflow question on the topic,我明白这种用法:

public function validationCustomAndDefault()
{
    $validator = new \App\Model\Validation\CustomModelValidator();

    return $this->validationDefault($validator);
}

问题:基于验证功能的自定义验证会创建一个新的验证对象。我想组合多个可重用的验证。我怎么能意识到这一点?所以在某种伪代码中:

// In src/Model/Table/UsersTable

public function validationDefault(Validator $validator)
{
    $validator1 = new \App\Model\Validation\CustomAddressValidator(); // Bunch of columns defined in there
    $validator2 = new \App\Model\Validation\CustomOtherValidator();

    $validator = validator1 + $validator2;

    return $validator;
}

【问题讨论】:

    标签: validation cakephp cakephp-3.0 cakephp-3.x


    【解决方案1】:

    我最终使用了静态函数。自定义验证器类:

    <?php
    
    namespace App\Model\Validation;
    
    use Cake\Validation\Validator;
    
    /**
     * Validation for the four address fields
     */
    class AddressValidator extends Validator
    {
    
        static public function addAddressFields(&$validator)
        {
            // Add validation rules to existing validator
    
            $validator
                    ->scalar('address_city')
            // ...
        }
    }
    

    在我的UsersTable.php中使用:

    class UsersTable extends Table
    {
        // ...
    
        public function validationDefault(Validator $validator)
        {
            $validator
                ->nonNegativeInteger('id')
                ->allowEmptyString('id', 'create');
    
            // ...
    
            AddressValidator::addAddressFields($validator);
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-26
      • 2017-11-06
      • 1970-01-01
      • 2016-11-27
      相关资源
      最近更新 更多