Cakephp 在模型上使用HtmlHelper在返回的错误中插入链接

Cakephp 在模型上使用HtmlHelper在返回的错误中插入链接,cakephp,model,html-helper,Cakephp,Model,Html Helper,我正在使用CakePHP并试图了解使我的应用程序保持一致性和逻辑性的最佳方法 现在,我正在尝试使用模型数据验证并在视图中处理验证错误,如果我想在返回的错误中插入一些链接,例如忘记密码,我怀疑该怎么做 在模型中使用(如果可能的话)HtmlHelper在我的应用程序中返回一致的链接是好的,还是我应该考虑另一种方法 <?php App::import('Helper', 'Html'); class User extends AppModel { var $name = 'User';

我正在使用
CakePHP
并试图了解使我的应用程序保持一致性和逻辑性的最佳方法

现在,我正在尝试使用
模型数据验证
并在
视图
中处理验证错误,如果我想在返回的错误中插入一些链接,例如忘记密码,我怀疑该怎么做

在模型中使用(如果可能的话)
HtmlHelper
在我的应用程序中返回一致的链接是好的,还是我应该考虑另一种方法

<?php
App::import('Helper', 'Html');
class User extends AppModel {
    var $name = 'User';
    var $validate = array (
        'email' => array (
            'checkEmail' => array (
                'rule' => array('email', true),
                'message' => 'Email not valid message.'
            ),
            'checkUnique' => array (
                'rule' => 'isUnique',
                'message' => 'This email is allready in the db, if you forgot the password, '.(string)$this->Html->link('click here', array('controller' => 'users', 'action' => 'password-recover')).'.'   
            )
    )
    // the rest of the code...

这是一个困难的话题,因为

  • 你可能需要
  • 验证与通常在
    $validate
    中的情况相同,不能包含动态内容
  • 表1)

    • 您还可以将
      Router::url()
      与手动HTML一起使用
    • 您可以使用BBcode或伪标记,并将其转换为flashmessage视图/元素中的真实链接
    第2页)

    • 如果需要,可以使用
      \u construct()
      $this->validate
      来使用动态元素

    在PHP中,类的属性(如
    $validate
    )必须是


    你在给自己制造麻烦。在模型和控制器中无法访问辅助对象。有充分的理由:M和C不应该与V有关


    有很多方法可以完全按照您的意愿执行(但涉及的代码要多得多)。既然您要求的是最智能的方式:在登录表单之后,只在视图中回显重置密码链接有什么问题?只是
    echo“忘记密码了?”$此->Html->链接('单击此处',数组('控制器'=>'用户','操作'=>'密码恢复')

    如果您真的想在验证消息中使用HTML,CakePHP提供了一种方法,无需破坏蛋糕,无需编写大量代码

    $validation
    中,只需使用您希望呈现给用户的任何HTML即可

    在您的视图中,当您创建pass时,将以下数组设置为
    $options

    $options = array('error' => array(
                  'attributes' => array('escape' => false)
                   ))
    
    要了解有关
    $options['error']
    ..选项的详细信息,请参阅


    或者,如果您希望所有输入都没有HTML转义,则可以在创建表单时传递。

    我不同意破坏MVC逻辑。我还尝试了所有的
    数组('escape'=>false)
    可能的方法(在表单->输入、表单->错误,甚至在模型中),但没有一种方法对我有效!(cakephp 2.0)

    “Anh Pham”答案是最简单的方法。除此之外,我还从模型验证返回了空的错误消息(“errorMessage”=>false;在cakePhp 2.0中不起作用)

    因为我想将一个变量传递给视图以在那里构建链接(MVC),所以在控制器中检查字段是否无效:

    $invlaidFields = array_keys($this->Model->validationErrors();    
    if ( in_array('myField', $invalidFields)  ){
         ...
         }
    
    视图中,我检查字段是否无效,然后回显我的错误消息,给它类错误消息,使其看起来与其余错误消息相同

    if ($this->Form->('myFields')) { ... echo '<span class="error-message">error message'. $this->Html->link(...).'</span>'; }
    
    if($this->Form->('myFields')){…回显“错误消息”。$this->Html->link(…)。;}
    
    希望它能帮助别人


    另外,提及您正在使用的cakePHP版本始终是一个好的实践…

    要使用cakephp2,您可以使用以下内容:

    //模型验证

    'company' => array('notempty' => array('rule' => array('notempty'),'message' => "select one company o send email to <a href="mailto:email@gmail.com">contact</a>",),)
    
    'company'=>array('notempty'=>array('rule'=>array('notempty'),'message'=>“选择一家要向其发送电子邮件的公司”,),)
    
    //正面

    <?php if ($this->Form->isFieldError('Register.company')): ?>
            <span class="text-danger"><?php echo $this->Form->error('Register.company', null, array('escape'=>false)); ?></span>
          <?php endif; ?>
    
    
    
    您不必中断“MVC”,验证当然可以包含对您自己自定义方法的调用,从而使其具有所需的动态性。+1。通过一个例子(我已经添加了),这个答案可能更清楚。OP询问的是动态验证消息,而不是自定义验证规则。由于验证消息最初必须是常量,因此使用psuedo标记(稍后替换为链接)是有意义的,并且
    \uu construct()
    将是可以使用运行时信息更新类属性的位置之一。确切地说,这是一个工作示例:
    echo$this->Form->error('User.email',array('class'=>'css error')、数组('escape'=>false));
    您应该能够将
    数组('error'=>array('escape'=>false))
    放在
    输入()调用中,而无需调用
    $this->Form->error()
    。除非您正在创建自己的表单HTML,否则您不需要调用
    $this->$Form->error()
    <?php if ($this->Form->isFieldError('Register.company')): ?>
            <span class="text-danger"><?php echo $this->Form->error('Register.company', null, array('escape'=>false)); ?></span>
          <?php endif; ?>