【问题标题】:CakePHP 3 show validation errors in templateCakePHP 3 在模板中显示验证错误
【发布时间】: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-&gt;Form-&gt;create($user... 好像验证失败它会将错误设置到特定字段。你能提供你的表单代码吗
  • @AmanRawat 这是正确的解决方案。请作为答案发布,我会将其标记为已接受。
  • @Andy 如果您有解决方案,您可以发布答案;)

标签: php cakephp


【解决方案1】:

根据@AmanRawat 的建议,我的代码问题是模板Users/add.ctp 应具有以下内容:

<?= $this->Form->create($user) ?>

相对于&lt;?= $this-&gt;Form-&gt;create() ?&gt;。不同之处在于表单助手将添加适当的验证消息,因为它有一个 $this-&gt;Users-&gt;newEntity(); 实例(在 UsersController.php 中指定)

还需要进一步修改才能在模型中正确显示验证消息,如下所示(注意括号在不同的位置):

$rules->add($rules->isUnique(['username'], 'Username is already taken.'));

【讨论】:

    猜你喜欢
    • 2016-05-10
    • 2015-09-14
    • 1970-01-01
    • 2021-08-26
    • 1970-01-01
    • 1970-01-01
    • 2011-11-25
    • 2011-04-21
    • 1970-01-01
    相关资源
    最近更新 更多