在输入字段Phalcon php下面显示表单错误消息

时间:2014-04-27 10:44:59

标签: php css forms phalcon

如果某个字段没有通过验证,是否有办法在表单的输入字段下显示错误消息?我可以以同样的方式处理表单(在我的情况下是用户/索引)表单,然后将这些错误消息发送到视图吗?我所拥有的是:index.volt:

<div class="loginForm">
<form action=<?= $form->getAction(); ?> method="POST">
<label for="username">Username: </label>
<?= $form->render('username'); ?>
    <br/>
<label for="password">Password: </label>
<?= $form->render('password'); ?>
<br>
<?= $form->render('login'); ?>
</form>
</div>

LoginForm.php:

<?php
use Phalcon\Forms\Form,
Phalcon\Forms\Element\Text,
Phalcon\Forms\Element\Password,
Phalcon\Forms\Element\Submit,
Phalcon\Validation\Validator\PresenceOf,
Phalcon\Validation\Validator\StringLength;

class LoginForm extends Form {

public function initialize()
{
$this->setAction('login');
$username = new Text('username');
$username->addValidator(new PresenceOf(array (
    'message' => 'Can\'t be empty'
)));

$password = new Password('password');
$password->addValidator(new PresenceOf(array (
    'message' => 'Can\'t be empty'
)));

$submit = new Submit('login', array('value' => 'Login'));

$this->add($username);       
$this->add($password);
$this->add($submit);
}
}

和UserController.php:

<?php



class UserController extends \Phalcon\Mvc\Controller
{
/**
* login form
* @var LoginForm
*/
private $_loginForm;
public function initialize()
{
$this->_loginForm = new LoginForm();
}

public function indexAction()
{
$this->view->setVar('form', $this->_loginForm);
}
public function loginAction()
{   
if($this->request->isPost()) {

    if (!$this->_loginForm->isValid($this->request->getPost())) {
        foreach ($this->_loginForm->getMessages() as $message) {
            echo $message. '<br />';
            // redirect to User/index and pass error messages to view to display them to a user
        }
    }

}
}

}

修改 或者,在显示的相同操作上处理此表单会更好。我怎么能这样做?

1 个答案:

答案 0 :(得分:2)

首先,您在index.volt中提供的内容不是伏特含量。请参阅此处how to configure Volt并在视图中使用Volt语言。

你所要求的是Phalcon中的flashing messages

不幸的是,在当前版本中,您只能根据类型(成功,错误,警告等)刷新消息,但您可以创建自己的类型,所以我们假设该类型表示输入名称。

UserController.php

...
    public function loginAction()
    {   
      if($this->request->isPost()) {

        if (!$this->_loginForm->isValid($this->request->getPost())) {
            $messages = $this->_loginForm->getMessages();

            $userMessage = $messages->filter('username');
            if(count($userMessage)) 
              $this->flash->message('username', $userMessage[0]);

            $passMessage = $messages->filter('password');
            if(count($passMessage)) 
              $this->flash->message('username', $passMessage[0]);

            return $this->dispatcher->forward(["action" => "index"]);
        } else {
          //Login
        }
    }

index.volt

<div class="loginForm">
  <form action="{{form.getAction()}}" method="POST">
    <label for="username">Username: </label>
    {{form.render('username')}}<br/>
    {{ flash.has('username') ? flash.output('username') : '' }}

    <label for="password">Password: </label>
    {{form.render('password')}}<br>
    {{ flash.has('password') ? flash.output('password') : '' }}

    {{form.render('login')}}
  </form>
</div>