对于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)
无法正常工作?
答案 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;
}
}
}
}?>
让我们希望在最近的将来能够提供更简单的方法: