【发布时间】: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