我正在运行Symfony 1.2并利用对象帮助器在表单外部创建一些内联可编辑字段。因为没有symfony或scriptalicious快捷方式为多选选择框创建内联编辑标记(非常类似于input_in_place_editor_tag或Ajax.InPlaceCollectionEditor),我使用object_select_tag并将multiple选项设置为true来创建一个选择框,如下所示: / p>
<?php
echo object_select_tag($user->getsfGuardPermissions(), 'getId', array (
'include_blank' => false,
'related_class' => 'sfGuardPermission',
'peer_method' => 'doSelect',
'text_method' => '__toString',
'control_name' => 'user_customer_permissions_'.$user_customer->getId(),
'multiple' => true
));
?>
然后我将调用observe_field以在更改表单时通过Ajax更新对象。然而
问题是,虽然$ user-&gt; getsfGuardPermissions()返回一个sfGuardPermission对象数组。默认情况下不会选中它们。
经过一些测试后,我发现如果只传递一个sfGuardPermission对象而不是数组,则会选择正确的选项。这是Symfony的限制还是有不同的做法?如果symfony默认情况下不允许你选择多个选项,那么很难相信symfony会包含'multiple'选项。
看看ObjectHelper.php很明显该函数不期望一个数组。默认情况下如何选择多个对象?
答案 0 :(得分:1)
object ___ select ___ tag()将接受与您想要选择的对象值对应的整数数组。例如:
<?php
echo object_select_tag(array(4, 5), 'getId', array (
'include_blank' => false,
'related_class' => 'sfGuardPermission',
'peer_method' => 'doSelect',
'text_method' => '__toString',
'control_name' => 'user_customer_permissions_'.$user_customer->getId(),
'multiple' => true
));
?>
默认情况下会选择值4和5。这并不理想,因为文档将第一个参数列为$ object object select tag(symfony API)。所以我认为这可以被认为是一种解决方法。理想情况下,当multiple标志设置为true时,函数将接受$ object参数的对象数组。这与其他辅助函数一致。