Demandes d'évolutions : Classe FormHelper limite l'usage de champs au sein du module form

  • 81873.1

    15/11/2013 00:36


    Mathias
    Rang : Expert
    Bonjour,

    au sein du formHelper du module form, la méthode suivante empêche la création de champs dans un module spé :
    /**
    	 * @param form_persistentdocument_field $field
    	 * @param string $value
    	 */
    	public static function fromFieldDocument($field, $value = '')
    	{
    	  
    		if ($field instanceof form_persistentdocument_field)
    		{
    			$type = ucfirst(substr(get_class($field), strlen('form_persistentdocument_')));
    			$methodName = 'from'.$type.'FieldDocument';
    			if (f_util_ClassUtils::methodExists(get_class(), $methodName))
    			{
    				return self::$methodName($field, $value);
    			}
    		}
    		return "Unknown field type: ".get_class($field, $value);
    	}


    En effet, la ligne :
    $type = ucfirst(substr(get_class($field), strlen('form_persistentdocument_')));

    conditionne la poursuite du code au fait que le model du document appartienne au module form. Or si j'ai dans un module spé créé des champs spécifique qui étendent un type de champs particulier du module form sans l'injecter, on est coincé, et obligé d'utiliser l'AOP pour arriver à nos fins...

    c'est dommage ;)

    Développe sous linux Ubuntu 12.04 LTS Desktop
    Projet ecommerce core 3.6.7
  • 81873.2 en réponse à 81873.1 écrit par Mathias

    15/11/2013 01:22


    Mathias
    Rang : Expert
    D'ailleurs, est-ce qu'il est possible de faire de l'AOP sur une classe abstraite ?
    Car en gros pour l'instant ça ne marche pas :(

    J'ai pourtant :
    créé mon fichier aop.xml dans mon dossier config avec la ligne :
    <replace pointcut="FormHelper" class="project_FormHelper" />


    J'ai bien ma project/lib/aop/project_FormHelper.class.php qui contient :
    class project_FormHelper extends FormHelper
    {
    
      
      /**
       * @param form_persistentdocument_field $field
       * @param string $value
       */
      public static function fromFieldDocument($field, $value = '')
      {
        Framework::fatal('########AOP AOP AOP AOP AOP AOP AOP AOP');
        return parent::fromFieldDocument($field, $value);
    }
    


    J'ai bien au sein de cache/aop/ le fichier FormHelper_replaced0.class.php, mais il ne contient pas la modification de ma classe...

    Une idée ?

    Sinon je vais devoir passer obligatoirement par l'injection de mes documents du module form. L'impact est que les nouvelles propriétées uniquement utiles pour mon module, vont être affichés aussi dans le module form... ce que je ne souhaitai pas dans un premier temps...

    Édité par Mathias 15/11/2013 01:22


    Développe sous linux Ubuntu 12.04 LTS Desktop
    Projet ecommerce core 3.6.7
  • 81873.3 en réponse à 81873.2 écrit par Mathias

    15/11/2013 10:35


    Jean-Michel
    Titre : Community Manager
    Rang : Expert
    J'ai fait un ticket afin d'éviter de passer par de l'AOP.

    En ce qui concerne le fait que l'on ne passe pas par la méthode static, cela est probablement lié au fait qu'il y ait un appel via "self" qui traîne quelque part au lieu que ce soit le nom de la classe.
    N'oublie pas de recompiler ton AOP après modification du fichier.

    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é.
 
Merci de prendre connaissance et de respecter les règles des forums.
 
1425 membres
Aucun membre connecté