2009-08-14 10 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オブジェクトを1つだけ渡すと、適切なオプションが選択されることがわかりました。これは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パラメータのオブジェクトの配列を受け入れます。これは他のヘルパー関数と一貫しています。

関連する問題