默认情况下使用object_select_tag选择多个选项

时间:2009-08-14 19:08:32

标签: php symfony1

我正在运行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很明显该函数不期望一个数组。默认情况下如何选择多个对象?

1 个答案:

答案 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参数的对象数组。这与其他辅助函数一致。