Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 08-04-2016 10:32:55

JGreco
Administrateur
Date d'inscription: 22-12-2012
Messages: 432

Ajout d'un composant a un element de formulaire

Bonjour,

J'ai une problématique avec un formulaire, j'utilise beaucoup Zend Form que j'essaye de pousser au max de ses possibilités, mais là j'arrive pas trop a voir comment faire simple. J'explique :

J'ai un formulaire de recherche sur une page avec un champ lié a un bouton. Ce bouton ouvre une popup.
Dans cette popup se trouve une arborescence dépliable. A chaque clic d'un parent, je fais une requête pour afficher les enfants de la liste (impossible vu le model de donnée de faire toute la liste d'un coup sa me tuerai les perfs).

Ces deux élements sont indissociable, et seront utilisé un peu partout dans mon application.

Au clic d'un élément de la liste finale, je dois ajouter l’élément cliqué a la valeur du champ de formulaire. Le composant que je souhaite donc ajouter a l'élément Zend\Form\Element\Text est un autre champ du fieldset ? Un service attaché ? Je vois pas trop comment définir ce bouton(le composant entier en fait), quel périmètre lui donner.

Avez vous des idées pour faire ça de façon élégante ?

Ma première idée était de faire un custom Zend\Form\Element pour ce composant que j'ajouterai ensuite au fieldset de formulaire. Mais j'ai pas l'impression que c'est un element de formulaire puisqu'il n'a pas besoin de validator, seulement le champs qui prendra la valeur de cette liste sera validé. A moins que le custom element a créer soit en réalité le champs Text accompagné de son bouton et que ce soit l'association des deux qui fasse l’élément custom.


ZF2 et doctrine addict
profil stack overflow : http://stackoverflow.com/users/3333246/ … ab=profile

Hors ligne

 

#2 10-04-2016 13:49:12

tdutrion
Administrateur
Lieu: Dijon, Paris, Edinburgh
Date d'inscription: 23-12-2009
Messages: 614
Site web

Re: Ajout d'un composant a un element de formulaire

Bonjour,

J'aurais dit un champ custom qui a principalement un custom view helper en fait. Ton bouton et ta popup, c'est juste de l'affichage, pas un vrai composant du formulaire, la seule partie composant du form c'est ton field qui reçoit la valeur de retour de la popup.

Du coup :
CustomElement => CustomElementViewHelper

Le view helper c'est celui de l'élément de base (text je pense), puis tu ajoutes ton html et javascript de décoration (le bouton et la popup), puis les données de la dropdown de la popup viendrons en ajax (j'imagine), ou alors il te faut une option en plus dans ton CustomElement qui te permette de remplir le dropdown.

Je pense que ce que je viens d'écrire veut dire quelque chose dans ton contexte, dis moi si je me trompes smile

Hors ligne

 

#3 11-04-2016 09:18:30

JGreco
Administrateur
Date d'inscription: 22-12-2012
Messages: 432

Re: Ajout d'un composant a un element de formulaire

Merci de ta réponse Théocrite, je vais implémenter un truc dans ce gout la ce jour, je reviens faire un feedback avec la solution si sa fonctionne wink

Au passage bravo avec un peu de retard pour ta certification ZFCA du mois dernier. Il va falloir que je m'y mette bientôt aussi pour la passer !


ZF2 et doctrine addict
profil stack overflow : http://stackoverflow.com/users/3333246/ … ab=profile

Hors ligne

 

#4 11-04-2016 15:03:08

JGreco
Administrateur
Date d'inscription: 22-12-2012
Messages: 432

Re: Ajout d'un composant a un element de formulaire

Bon j'ai avancé dans la conception voilà ce que sa donne :


Attention ce n'est qu'un prototypage

Code:

[lang=php]

// Classe permettant de render l'element avec son bouton associé
class FormEntityRow extends FormText
{
    public $listService;

    public function __construct(ListService $listService)
    {
        $this->listService = $listService;
    }

    public function render(ElementInterface $element)
    {
        $input = parent::render($element);
        $string = $this->addEntityButton($input);
        return $string;
    }

    /**
     * Partial a inclure voir les best practises
     * @param $input
     * @return mixed
     */
    public function addEntityButton($input)
    {
        $html = "<div class='col-xs-10'>%s</div><div class='col-xs-1'>%s</div>";
        $button = "<button class='button btn' onclick='javascript:getList()'>Liste</button>";
        return sprintf($html, $input, $button);
    }

    public function generateListTree()
    {

    }
}

Code:

[lang=php]
/**

 * Class EntityElement
 * @package Application\Entities\Form\Element
 */
class EntityElement extends Element implements InputProviderInterface
{
    public function getInputSpecification()
    {
        return array(
            'type' => 'Zend\InputFilter\Input',
            'name' => 'entityList',
            'required' => true,
            'filters' => array(
                array('name' => 'Zend\Filter\StringTrim'),
                array('name' => 'Zend\Filter\StripTags'),
            ),
            'validators' => array(
                array('name' => 'EntityValidator')
            ),
        );
    }
}

Code:

[lang=php]
class EntityValidator extends AbstractValidator
{
    protected $messageTemplates = array(
        'not_managable' => "you_cant_manage_this_entity"
    );

    public function isValid($entity, $context = null)
    {
        return true;
    }
}

Code:

[lang=php]
// ajout dans un formulaire quel qu'il soit
        $this->add(
            array(
                'type' => 'Application\Entities\Form\Element\EntityElement',
                'name' => 'entityList',
                'options' => array(
                    'label' => 'entity_label'
                ),
                'attributes' => array(
                    'id' => 'entityList',
                    'class' => "form-control",
                )
            )
        );

Maintenant que j'ai toute la boucle, j'ai bien le formulaire qui apparait avec le bouton. Mais j'ai une brique qui pose soucis : Le javascript du bouton doit afficher la popup, qui elle meme va m'afficher une arborescence complète issue de la base, et dans cette arbo j'aurais  del'ajax aussi.

Mon souhait c'est que pour les formulaire qui auront besoin de ce champ n'est pas a toucher au javascript de ce form, du coup il faut qu'il embarque tout et que l'utilisateur est juste a déclarer le dernier bout de code que j'ai mis, avec l'appel au viexHelper dans la vue et c'est tout. Le reste mon code le gère ce qui comprend naturellement la partie Javascript.

Ma question est : je pensais appeler un partial dans la classe 'FormEntityRow' et render ce partial avec le viewrenderer que je mettrai en dépendance, toutefois je ne sais pas s'il est possible d'appeler le partial dans ce contexte.

EDIT : Bon apparemment inclure le viewrenderer et donner un partial en paramètre au render fait très bien taf, je dirais même qu'il est conçu pour !


ZF2 et doctrine addict
profil stack overflow : http://stackoverflow.com/users/3333246/ … ab=profile

Hors ligne

 

#5 12-04-2016 15:06:53

tdutrion
Administrateur
Lieu: Dijon, Paris, Edinburgh
Date d'inscription: 23-12-2009
Messages: 614
Site web

Re: Ajout d'un composant a un element de formulaire

En effet ça semble être une bonne solution !

Du coup là tu as réussi à faire tout ce que tu voulais à ce niveau ?

Pour la certif, j'ai principalement basé mes révisions sur zf2 certification study guide, et bien sûr toute la doc (et essayer moi même).
Pour le reste, on ne peut pas trop en discuter (ça fait parti du disclaimer au début auquel on agree), mais c'est assez précis comme questions (paramètres d'une fonction, options possibles, etc). On pourra en reparler sur Slack ou IRC si tu veux. En tout cas bien content de l'avoir fait, ne serait-ce que pour valider mon niveau (c'est toujours un peu dur quand on bosse en indépendant sans forcément d'équipe de dev...)

Hors ligne

 

#6 13-04-2016 09:03:36

JGreco
Administrateur
Date d'inscription: 22-12-2012
Messages: 432

Re: Ajout d'un composant a un element de formulaire

J'ai bien modifié le code ci dessus, pour que tout soit embarqué avec les partial en tant que composant all in one. Mais oui j'ai pu faire tout ce qu'il fallait.
Je te remercie pour ton aide wink

Et pour la certif oui on en discutera a l'occasion j'aimerai valider mon niveau également, peut être même passer quelque heure de CIF dedans avec le voucher d'examen.


ZF2 et doctrine addict
profil stack overflow : http://stackoverflow.com/users/3333246/ … ab=profile

Hors ligne

 

Pied de page des forums

Propulsé par PunBB
© Copyright 2002–2005 Rickard Andersson
Traduction par punbb.fr

Graphisme réalisé par l'agence Rodolphe Eveilleau
Développement par Kitpages