在CakePHP 3中,我使用我的UsersTable.php
模型验证用户名是否与以下内容唯一:
public function buildRules(RulesChecker $rules)
{
$rules->add($rules->isUnique(['username']), 'Username is already taken.');
return $rules;
}
在我的控制器UsersController.php
中,我可以使用debug()
显示相应的错误消息:
$user = $this->Users->newEntity();
// ...
debug($user->errors());
这将产生:
[
'username' => [
'Username is already taken.' => 'This value is already in use'
]
]
我能想到将其发送回模板的唯一方法是在我的控制器中设置它,例如$this->set('errors', $user->errors())
,然后将其显示在模板中,例如
<?php if ($errors->username): ?>
<p class="error"><?= $errors->username; ?></p>
<?php endif; ?>
这是正确的方法吗,还是有更短的方法?您是否手动向模板发送错误?我确定Cake 2.x会以某种方式自动完成这一切吗?
在这里问了一个类似的问题:CakePHP 3 and form validation errors但是给出的答案是关于代码中的其他一些错误,即使它被接受了。
答案 0 :(得分:1)
根据@AmanRawat的建议,我的代码问题是模板<?= $this->Form->create($user) ?>
应该具有以下内容:
<?= $this->Form->create() ?>
与$this->Users->newEntity();
相反。不同之处在于,表单帮助器将添加相应的验证消息,因为它具有UsersController.php
的实例(在$rules->add($rules->isUnique(['username'], 'Username is already taken.'));
中指定)
还需要进一步修改,以便在模型中正确显示验证消息,如下所示(注意括号位于不同的位置):
LeakTraceElement