Détail du message 81962.2

Message numéro 2 dans le sujet change:input et beans.

  • 81962.2 en réponse à 81962.1 écrit par Mathias

    22/11/2013 13:40


    Jean-Michel
    Titre : Community Manager
    Rang : Expert
    Bonjour Mathias,

    Effectivement il y a une erreur dans le wiki , par oubli de mise à jour, je viens de mettre à jour le tableau de la page concernée ;).

    Concernant l'absence du champ, il peut y avoir plusieurs raisons. On va donc chercher progressivement.

    1 - Le type de bean
    De quel type de bean parle-t-on ; généré directement à partir d'un document ou construit à partir d'une classe (comme dans "modules/order/lib/bean/IdentifyStepBean.class.php")? S'il s'agit du second cas, la déclaration de "mybeanfieldname" est-elle bien précédée des commentaires de typage?

    2 - Le bean et la balise form
    Quelque soit le type de bean, il ne faut pas oublier de l'indiquer dans la balise form et de fournir également le nom de classe.
    <form change:form="beanClass module_MaClasseObjet; beanName monObjet">


    Ainsi on peut être sûr que dans le code de traitement du formulaire "$monObjet" sera une instance de "module_MaClasseObjet".

    3 - Cas d'une propriété ne faisant pas partie du bean dans un formulaire
    Il est parfaitement possible d'ajouter un champ dans un formulaire de bean mais qui n'appartient pas au modèle du bean, dans ce cas pour la retrouver dans le traitement, tout dépend de la manière dont on la déclare dans le formulaire :
    <input type="checkbox" name="mybeanfieldname" checked="on" />

    Implique le code PHP suivant pour récupérer la valeur :
     // $this->getHTTPRequest() returns f_mvc_HTTPRequest
    $mybeanfieldname = $this->getHTTPRequest()->getParameter("mybeanfieldname");


    La déclaration suivante dans le formulaire :
    <input type="checkbox" name="monmoduleParam['mybeanfieldname']" checked="on" />

    Implique le code PHP suivant pour récupérer la valeur :
    // @var f_mvc_Request $request
    $mybeanfieldname = $request->getParameter("mybeanfieldname");


    4 - La méthode populate<NomBeanDansForm>Bean
    Il est possible que vous ayez un filtrage qui se fait au niveau de votre bean par l'intermédiaire de la méthode répondant à la charte de nommage décrite ci-dessus et qui demande à ce que la propriété "mybeanfieldname" ne soit pas prise en compte. Il faudrait donc modifier la manière dont le bean se fait peupler en modifiant cette méthode. Ce qui donnerait (selon la balise form un peu plus haut) :
    function populateMonObjetBean(module_MaClasseObjet $monObjet, $request)
        {
            $include = array('label', 'mybeanfieldname');
            // standard population process, excluding some properties
            $excludedProperties = array();
    
            return BeanUtils::populate($monObjet, $request->getParameters(), $include, $excludedProperties);
        }

    Ce qui a pour effet de peupler le bean avec uniquement les propriétés "label" et "mybeanfieldname" transmises par le formulaire.


    Je pense que parmi les points ci-dessus se trouve celui qui permettra de résoudre le problème rencontré.


    Pour une meilleure réponse, pensez à indiquer la version sur laquelle vous rencontrez des difficultés, ainsi que son type (CMS ou eCommerce core).
    Pour tout problème d'installation indiquez le nom de l'hébergeur et s'il s'agit d'un serveur mutualisé ou dédié.
 
1359 membres
Aucun membre connecté