2009-08-14 148 views
1

我正在運行Symfony 1.2並利用對象幫助程序在表單外創建一些內聯可編輯字段。因爲沒有symfony或scriptalicious捷徑來爲多選擇框(與input_in_place_editor_tag或Ajax.InPlaceCollectionEditor類似)創建內聯編輯標記,所以我使用object_select_tag並將multiple選項設置爲true來創建如下所示的選擇框:默認情況下使用object_select_tag選擇多個選項

<?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-> getsfGuardPermissions()返回一個sfGuardPermission對象的數組。它們不是默認選中的。

經過一些測試後,我發現如果只傳遞一個sfGuardPermission對象而不是數組,則會選擇正確的選項。這是Symfony的限制還是有不同的方式?很難相信,如果symfony不允許你默認選擇多個選項,那麼symfony會包含'multiple'選項。

看着ObjectHelper.php,很明顯該函數並不期待數組。如何默認選擇多個對象?

回答

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)。所以我想這可以被認爲是一種解決方法。理想情況下,當多標誌設置爲true時,該函數將接受$ object參數的一個對象數組。這將與其他幫助功能一致。

相關問題