【发布时间】:2017-10-04 02:03:17
【问题描述】:
在 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,但给出的答案是关于代码中的一些其他错误,即使它被接受了。
【问题讨论】:
-
你用过表单助手吗?
-
@RayannNayran 是的
-
你必须在你的表单中这样做
$this->Form->create($user...好像验证失败它会将错误设置到特定字段。你能提供你的表单代码吗 -
@AmanRawat 这是正确的解决方案。请作为答案发布,我会将其标记为已接受。
-
@Andy 如果您有解决方案,您可以发布答案;)