CakePHP 3在模板中显示验证错误

时间:2017-05-05 14:26:41

标签: php cakephp

在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但是给出的答案是关于代码中的其他一些错误,即使它被接受了。

1 个答案:

答案 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