【问题标题】:How to use validationDefault method in cakephp 3如何在 cakephp 3 中使用 validationDefault 方法
【发布时间】:2018-11-19 17:56:20
【问题描述】:

我正在尝试在我的模型 UsersTable 中使用 validationDefault 方法:

<?php
namespace App\Model\Table;
use Cake\ORM\Table;
use Cake\Validation\Validator;
class UsersTable extends Table
{

    public function initialize(array $config)
    {
        $this->addBehavior('Timestamp');
        $this->setTable('users');
        $this->setPrimaryKey('id');
    }

    public function validationDefault(Validator $validator)
    {
        $validator->add('login', [
            'length' => [
                'rule' => ['minLength',3],
                'message' => __('Login need to be at least 3 characters long')
            ]
        ]);

        return $validator;
    }
}

在我的用户控制器中,我有以下代码:

<?php
namespace App\Controller;
use Cake\Validation\Validator;

class UsersController extends AppController {

    public function initialize() {
        parent::initialize();
    }
    public function add() {

        if ($this->request->is('post')) {
            $user = $this->Users->newEntity($this->request->getData());
            if ($this->Users->save($user)) {
                $this->Flash->success(__('Your user has been created.'));
                return $this->redirect(['action' => 'index']);
            }
            $this->Flash->error(__('Unable to create your user.'));

    }

我的表单看起来像:

<?= $this->Form->create('Users', ['url' => ['controller' => 'Users', 'action' => 'add']]); ?>

    <fieldset>
        <legend><?= __('Ajouter un utilisateur') ?></legend>
        <?= $this->Form->control('login') ?>
        <?= $this->Form->control('password') ?>
        <?= $this->Form->control('role', [
            'options' => ['admin' => 'Admin', 'author' => 'Author']
        ]) ?>
    </fieldset>
<?= $this->Form->button(__('Ajouter')); ?>
<?= $this->Form->end() ?>

如果我在登录表单中使用带有“aa”的表单,则数据会插入到数据库中。但它们不应该被插入,因为验证器将 minLength 定义为 3。

当我使用保存方法时,似乎没有调用validationDefault。

这里是 var $user 的调试:

object(Cake\ORM\Entity) {

    'login' => 'g',
    'password' => '',
    'role' => 'admin',
    '[new]' => true,
    '[accessible]' => [
        '*' => true
    ],
    '[dirty]' => [
        'login' => true,
        'password' => true,
        'role' => true
    ],
    '[original]' => [],
    '[virtual]' => [],
    '[errors]' => [],
    '[invalid]' => [],
    '[repository]' => 'Users'

}

注意:如果我直接在控制器中使用验证器,则会打印错误:登录需要至少 3 个字符长。但我不想直接在控制器中使用验证器...

$validator = new Validator();
        $validator->add('login', [
            'length' => ['rule' => ['minLength', 3],
                'message' => __('Login need to be at least 3 characters long')
            ]
        ]);
        if($validator->errors($this->request->getData())) {
                debug($validator->errors($this->request->getData()));
            }

【问题讨论】:

    标签: php validation cakephp-3.0


    【解决方案1】:

    我问这个问题到 IRC 上的 #cakephp 频道,他们告诉我重新安装 cakephp,但使用 bake 生成模型类。

    之后,一切正常。

    【讨论】:

      猜你喜欢
      • 2020-08-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多