Formulaires PHP SilverStripe - Si j'imbrique un SelectionGroup dans un FieldGroup, l'une des Radio Box de SelectionGroup_Items associée n'apparaît pas. Pourquoi?

122

J'ai un formulaire qui a deux FieldGroups, et dans l'un des FieldGroups j'ai un SelectionGroup.

Les SelectionGroup_Items apparaissent dans le formulaire, FieldGroupmais les cases d'option permettant de sélectionner l'une des options n'apparaissent pas. Si je supprime le, FieldGroupil fonctionne à nouveau.

Je l' ai regardé les modèles cadres, et si je change le FieldGroup_holder.ss SmallFieldHolderpour FieldHolderles boîtes de radio apparaissent à nouveau et correctement. J'ai essayé de suivre les modèles pour voir lequel n'obéit pas SelectionGroupmais je continue à me perdre.

Voici un exemple de code

$fields = FieldList::create(
    FieldGroup::create(
        TextField::create('Name', 'Name')
    ),
    FieldGroup::create(
        SelectionGroup::create(
            'Test1or2',
            array(
                SelectionGroup_Item::create(
                    'Test1', array(
                        TextField::create('Test1', 'Test1')
                    ),
                    'Test1'
                ),
                SelectionGroup_Item::create(
                    'Test2', array(
                        TextField::create('Test2', 'Test2')
                    ),
                    'Test2'
                )
            )
        )
    )
),
FieldList::create(
    FormAction::create('submit', 'Submit')
)
Rudiger
la source
6
On dirait que SelectionGroup n'a pas de SelectionGroup_small.ssmodèle qui est utilisé lorsque vous imbriquez des champs. Créez-le simplement dans votre thème et modifiez-le. Cela pourrait également valoir la peine de soulever un problème sur github
wmk
1
@wmk n'a pas beaucoup de chance avec ça. Est-ce que je peux faire autre chose pour que ça marche?
Rudiger
1
J'ai également ajouté un problème git github.com/silverstripe/silverstripe-framework/issues/6637
Rudiger
1
Ce n'est pas une excellente question, et je ne sais pas comment elle a recueilli 57 votes positifs, surtout compte tenu du faible nombre de vues, mais je suppose que cela ne va nulle part à cause de cela. Votre problème concerne le HTML généré, mais vous ne le fournissez pas ou ne fournissez pas d'exemple de la sortie HTML souhaitée. Votre exemple de code n'est pas syntaxiquement valide et aucun contexte n'est fourni quant à l'emplacement où il est utilisé. Si vous avez résolu cela d'une manière ou d'une autre, vous devriez publier une réponse; si le problème n'est plus pertinent ou reproductible, vous devez supprimer la question.
miken32
6
@ miken32 c'est à faire spécifiquement avec le framework SilverStripe (d'où le tag) et un bug a été posté sur le référentiel GitHub (lié dans les commentaires). La raison pour laquelle il n'y a pas de html est qu'il n'y a pas de modèle html pour les fonctions données, c'est le bogue. Outre un point-virgule à la fin, je n'ai aucune idée de ce que vous parlez, car il est syntaxiquement invalide. Quiconque connaît le cadre connaîtra son contexte. C'est toujours un bug ouvert et facilement reproductible.
Rudiger

Réponses:

1

Vous pouvez ajouter un autre jeu de champs, puis définir ses attributs sur id="hidden_field" aria-hidden="true". Dans le document css, vous pouvez effectuer les opérations suivantes.

    #hidden_field{
        display:none;
        height:0;
        width:0;
        margin:0;
        padding:0;
        visibility: hidden;
    }

Cela devrait masquer le comportement de requête de SilverStripe Framework. Dans mes propres formulaires php, des crochets aléatoires apparaissaient chaque fois que quelqu'un soumettait un nouveau formulaire plusieurs fois sous différents numéros d'identification de pièce. J'ai utilisé cette approche pour masquer les crochets aléatoires sur mon site.

JTS
la source
@Rudiger ce code a-t-il fonctionné pour contourner le bogue du framework SilverStripe?
JTS