2009-08-14 13 views
1

Ich bin mit Symfony 1.2 und mit dem Objekt Helper, um einige inline editierbare Felder außerhalb eines Formulars zu erstellen. Da es keine Symfony- oder Scriptalicious-Abkürzung gibt, um ein Inline-Edit-Tag für Multiple-Choice-Auswahlfelder zu erstellen (ähnlich wie input_in_place_editor_tag oder Ajax.InPlaceCollectionEditor), verwende ich object_select_tag mit der Option multiple auf true, um ein Auswahlfeld wie folgt zu erstellen:Wählen Sie mehrere Optionen standardmäßig mit 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 
)); 
?> 

Ich werde dann observe_field aufrufen, um das Objekt via Ajax zu aktualisieren, wenn das Formular geändert wird. Jedoch

Das Problem ist, dass während $ user-> getsfGuardPermissions() ein Array von sfGuardPermission-Objekte zurückgibt. Sie sind nicht standardmäßig ausgewählt.

Nach einigen Tests habe ich festgestellt, dass die richtige Option ausgewählt ist, wenn Sie nur ein sfGuardPermission-Objekt anstelle eines Arrays übergeben. Ist dies eine Einschränkung von Symfony oder gibt es eine andere Möglichkeit, dies zu tun? Es ist schwer zu glauben, dass Symfony die Option "mehrere" enthalten würde, wenn sie nicht standardmäßig mehrere Optionen auswählen könnten.

Betrachtet man ObjectHelper.php ist offensichtlich, dass die Funktion kein Array erwartet. Wie wähle ich standardmäßig mehrere Objekte aus?

Antwort

1

object___select ___ tag() akzeptiert ein Integer-Array, das den gewünschten Objektwerten entspricht. Zum Beispiel:

<?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 
)); 
    ?> 

Wird standardmäßig die Werte 4 und 5 auswählen. Dies ist nicht ideal, da die Dokumentation den ersten Parameter als $ object object select tag (symfony API) auflistet. Ich nehme an, dies kann als Workaround betrachtet werden. Im Idealfall würde die Funktion ein Array von Objekten für den Parameter $ object akzeptieren, wenn das Flag multiple auf true gesetzt ist. Dies wäre konsistent mit anderen Hilfsfunktionen.

Verwandte Themen