【问题标题】:Phalcon form validation messagesPhalcon 表单验证消息
【发布时间】:2014-07-06 03:42:45
【问题描述】:

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

$form = new SampleForm();

通过initialize在对应的类中实现SampleForm,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) 没有按预期工作?

【问题讨论】:

    标签: forms validation phalcon


    【解决方案1】:

    很遗憾地告诉你,表单处理在 Phalcon 中实现得很差而且很混乱,正如我现在看到的,经过几个月的工作。

    在这种情况下,您有多个 getMessage 函数,它们不会返回相同的值。甚至其中一些返回引用,其中一些返回错误消息的副本,如果您将消息附加到副本,它们将无法通过getMessage 函数在其他地方使用。 这甚至将 1.2 版更改为 1.3 版,我们很难弄清楚应该使用哪些函数。如果您愿意,可以在 Phalcon repository 中查看其背后的 C 代码,这对我弄清楚为什么事情没有按我预期的那样工作很有帮助。

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

    【讨论】:

    • 你找到解决办法了吗?
    【解决方案2】:

    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;
                                }
                        }
                    }
            }?>
    

    希望不久的将来会添加更简单的方法:

    【讨论】:

      猜你喜欢
      • 2015-09-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-06
      • 2012-06-04
      • 1970-01-01
      • 2014-06-20
      • 2015-10-27
      相关资源
      最近更新 更多