【问题标题】:CakePHP ValidationCakePHP 验证
【发布时间】:2011-05-14 11:50:29
【问题描述】:

使用 CakePHP 验证时如何显示消息?当我使用 input() 手动创建输入字段时,而不是使用简写 form() 助手。

例如表格:

<?php echo $this->Form->create('User', array('id' => 'loginform', 'type' => 'post',
'url' => array('controller' => 'users', 'action' => 'login'))); ?>

    <fieldset id="login">

        <ul class="clearfix">               
            <li id="li-username">
                <?php echo $this->Form->input('email', array( 'label' => array('class' => 'placeholder', 'text' => 'Email address or username') )); ?>
            </li>
            <li id="li-password">
                <?php echo $this->Form->input('password', array( 'type' => 'password', 'label' => array('class' => 'placeholder', 'text' => 'Password') )); ?>
                <span id="iforgot"><?php echo $this->Html->link('?', 
                array('controller' => 'users', 'action' => 'forgotpassword'),  array('title' => 'Forgot your password?')); ?></span>
            </li>
            <li id="li-submit">
                <button type="submit" title="Log in">Log in &#9658;</button>
            </li>
        </ul>

    </fieldset>

<?php echo $this->Form->end(); ?>

这是我在用户模型中的验证:

public $validate = array(
    'email' => array(
        'valid' => array(
            'rule' => 'email',
            'message' => 'The email is not valid'
        ),
        'required' => array(
            'rule' => 'notEmpty',
            'message' => 'Please enter an email'
        )
    )
);

但是没有显示验证错误消息?

编辑: 我在 /users/add/ 的注册表单上对此进行了测试,它可以正常工作,因此自动验证似乎不适用于登录方法????那么如何为登录表单添加验证:/

【问题讨论】:

  • Cameron 你能发布你的用户/添加操作代码吗?您可以通过转储 invalidfields 变量来查看验证失败的原因。 pr($this->User->invalidFields);

标签: php validation cakephp


【解决方案1】:

验证实际上存储在模型对象中。我不完全确定如何访问错误,但我认为它在 $this->User->validationErrors 中。

查看model api 了解更多信息。

要登录,请使用auth component。如果您不想这样做,那么只需从数据库中获取用户并在用户未通过身份验证时使用 $this->Session->SetFlash() 显示错误。

【讨论】:

  • 根据本书,虽然它应该自动显示输​​入字段下方的错误。
  • 是的。你为什么不使用 $form->input() ?另外,也许从您尝试验证表单的控制器中发布一些代码。
  • 我确实使用了表单输入(参见 OP 中的代码),但我认为这不是问题,因为它适用于注册表单,但不适用于登录表单(参见编辑)
  • 当您尝试验证或保存到数据库时,验证会启动。我假设您只是尝试在登录表单上进行身份验证而不是写入数据库。这可能就是验证不起作用的原因。如果登录失败,您可以自己填充 $this->User->validationErrors 来调整它。
  • 您好,您能举例说明如何登录吗?谢谢
【解决方案2】:

你可以显示你的代码登录功能吗?
我认为在您的代码中有重定向以防万一验证为假
如果你使用 $this->redirect() 它不会显示验证消息:)

【讨论】:

    【解决方案3】:

    首先您检查您的帖子数据将验证功能。您可以像这样在 else 条件下简单地检查:

    $this->{$this->modelClass}->set($this->data);
    if($this->{$this->modelClass}->validates(){
        //Save data in DB
    }else{
       pr($this->{$this->modelClass}->validationErrors); // This will show your error message
    }
    

    您也可以像这样在 view.ctp 文件中显示错误

    $错误 = ''; foreach ($this->validationErrors[$model] as $key => $validationError) { $errors .= $this->Html->tag('li', $validationError[0]); } echo $this->Html->tag('ul', $errors,array('class' => 'error'));

    【讨论】:

      猜你喜欢
      • 2010-12-10
      • 1970-01-01
      • 1970-01-01
      • 2012-10-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-21
      • 2011-07-07
      相关资源
      最近更新 更多