Phalcon表单验证消息

时间:2014-05-17 21:52:26

标签: forms validation phalcon

对于Phalcon中的表单消息如何工作存在一些误解。假设我们有一个表单并尝试为控制器中名为“code”的字段之一添加一些扩展错误消息:

$form = new SampleForm();

SampleForm的实现是通过initialize在相应的类中完成的,code元素是$code = new \Phalcon\Forms\Element\Text('code');

下一个代码添加了消息:

$form->get('code')->appendMessage(new \Phalcon\Validation\Message("The Code desn\'t exist or not valid"));

但尝试接收此消息,如

$form->getMessagesFor('code')

没有给我任何东西(转储):

Phalcon\Validation\Message\Group Object ( [_position:protected] => [_messages:protected] => )

通过

的另一次尝试

$form->get('code')->getMessages()

给(转储):

Phalcon\Validation\Message\Group Object ( [_position:protected] => [_messages:protected] => Array ( [0] => Phalcon\Validation\Message Object ( [_type:protected] => [_message:protected] => The Code desn\'t exist or not valid [_field:protected] => [_code:protected] => 0 ) ) )

我的问题:我做错了什么以及为什么$form->[get/has]MessagesFor($name)无法正常工作?

2 个答案:

答案 0 :(得分:1)

我很遗憾地告诉你,在几个月的工作之后,表格处理实际上很难实施并且在Phalcon中搞砸了,正如我现在所看到的那样。

在这种情况下,您有多个getMessage函数,它们不会返回相同的值。甚至其中一些返回引用,其中一些返回错误消息的副本,如果要将消息附加到副本,则它们将无法通过getMessage函数在其他位置使用。 这甚至从版本1.2改为1.3,我们很难确定应该使用哪些功能。如果您愿意,可以查看背后的C代码,在Phalcon repository中,对我来说,找出事情不符合预期的原因是非常有帮助的。

我的建议是,打印getMessage函数的值:Form::getMessages()Form::getMessagesFor()Form::get('element_name')->getMessages()。然后尝试向他们添加新消息并再次打印。查看哪一条包含您的消息。 我最终通过$form->get('email')->getMessages()获取了Phalcon内置验证类的消息,并通过$form->getMessagesFor('email')在控制器中添加了自己的消息。我仍然在寻找一个解决方案,将所有消息放在一个地方。

答案 1 :(得分:0)

Serin是对的,消息被保存到不同的对象中,所以我想出了所有这些

<?php foreach ($form as $element) {
                //Get any generated messages for the current element
                foreach ([$form->getMessagesFor($element->getName()), $element->getMessages()] as $messages) {
                    if (count($messages)) {
                            //Print each element
                            foreach ($messages as $message) {
                                    echo $message;
                            }
                    }
                }
        }?>

让我们希望在最近的将来能够提供更简单的方法: