Développer avec RBS Change : [Résolu] Modifier la contrainte d'une propriété d'un document existant

  • 77398.1

    16/04/2013 13:28


    Mathias
    Rang : Expert
    Bonjour,

    je cherche à modifier la contrainte du document modules_comment/comment sur la propriété "authorwebsiteurl".

    En effet, la contrainte par "url:true" force l'utilisateur a saisir http:// ce que je ne souhaite pas.

    Afin de modifier cela, j'ai réalisé les opérations suivantes :
    - change.php create-document mymodule comment
    - modifié l'entête du document avec :
    extend="modules_comment/comment" inject="true">

    - ajouté dans mon document la nouvelle contrainte sur la propriété cible :
    <add name="authorwebsiteurl" type="String" >
          <constraints>regexp:/^([a-z]+)?:\/\/([a-z0-9\-\.]+\.[a-z0-9]+)|localhost(:[\d]{1,5})?(\/.*)?$/</constraints>
        </add>

    - change.php add-document mymodule comment
    - change.php clear-all; change.php compile-all

    Malheureusement, il continue de prendre en compte la contrainte sur le document injecté, MAIS AUSSI la contrainte sur le nouveau document qui injecte l'ancien.

    De ce fait, lorsque je saisi une url qui ne match aucune des 2 regex, j'ai 2 messages d'erreur pour le même champs...

    Comment faire en sorte de ne plus avoir la contrainte du document injecté ?

    Édité par Mathias 16/04/2013 13:31


    Développe sous linux Ubuntu 12.04 LTS Desktop
    Projet ecommerce core 3.6.7
  • 77398.2

    16/04/2013 15:07


    Gaël Port
    Titre : Développeur RBS Change
    Rang : Expert
    Bonjour,

    Il n'est pas prévu de retirer une contrainte lors d'une injection, pour la simple raison que lorsqu'une contrainte est posée, c'est que le code qui utilise la propriété la suppose vérifiée. La faire sauter reviendrait donc à "casser" le code existant.

    Dans votre cas, je prendrais plutôt le problème dans l'autre sens : plutôt que de faire sauter les contraintes dans la base de données (ce qui peut avoir des conséquences) il serait nettement préférable de s'intercaler avant l'enregistrement du document pour ajouter le http:// s'il est absent. Ainsi on aura toujours des données valides en base tout en ayant une saisie plus libre.
  • 77398.3 en réponse à 77398.2 écrit par Gaël Port

    16/04/2013 15:09


    Mathias
    Rang : Expert
    bonne idée :)

    je vais faire ça dans le pre-save alors :)

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

    16/04/2013 15:48


    Mathias
    Rang : Expert
    erratum :

    pas dans le presave du service du document vu que cette méthode est appelée après la validation du bean.

    du coup, je ne peux pas non plus injecter le block : comment_BlockCommentsBaseAction car il n'est pas présent dans le config/blocks.xml du module comment.

    Du coup, je suis passé par de l'aop... de la façon suivante :
    <replace pointcut="comment_BlockCommentsBaseAction" class="myModule_MyBlockCommentsBaseAction" />

    afin de pouvoir agir sur la méthode :
    validateSaveInput()
    et ajouter comme préconisé la string souhaité si non présente.

    si vous avez plus propre que de l'AOP je suis preneur ;)

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

    16/04/2013 18:13


    Mathias
    Rang : Expert
    j'ai réussi à obtenir ce que je voulais en ajoutant en début de la méthode
    validateSaveInput()
    de ma classe "aopisée" :

    $authorwebsiteurl = $bean->getAuthorwebsiteurl();
        
        if((!f_util_StringUtils::beginsWith($authorwebsiteurl, 'http://')) && (!f_util_StringUtils::beginsWith($authorwebsiteurl, 'https://')))
        {
          $bean->setAuthorwebsiteurl('http://'.$authorwebsiteurl);
        }

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

    17/04/2013 09:39


    Gaël Port
    Titre : Développeur RBS Change
    Rang : Expert
    MathiasMarrillet a dit :
    si vous avez plus propre que de l'AOP je suis preneur ;)
    A priori dans ce cas là, ça reste la meilleure solution en effet.

    Vu qu'on doit agir sur un bloc abstrait dont de nombreux blocs héritent, cela ne peut pas se faire par injection de bloc (à moins d'injecter tous les blocs de commentaires un à un, ce qui serait "un peu" fastidieux).
 
Merci de prendre connaissance et de respecter les règles des forums.
 
1457 membres
Aucun membre connecté