> tag_copixlogo > CopixTimer > tag_copixzone > documentation > CopixCache > Modele_MVC > CopixEMail > CopixForms
fr

Formulaires pour Copix

Cette page présente les spécifications pour le futur CopixForms. C'est en cours de rédaction.

Objectifs de CopixForms

Introduction

Voici une autre proposition de fonctionnement, dont les principes diffèrent principalement sur l'endroit ou déclarer le formulaire (non pas dans un fichier XML, mais dans le template directement).

Dans le template

Je reprends le même exemple que dans la proposition 1.



{copixform type="start" valueObject=$toEdit dest="news|admin|valid"}
{* Ce champ représente la clef primaire de l'élément *}
{copixFormInput dao="news" property="id_news" showLabel=true visible=false}
<table>
 <tr>
  <td>
  {* Ce champ représente un libellé, en provenance d'une DAO. Les règles déclarées dans la dao sont automatiquement appliquées (requis ou non, maxlength, ...) *}
  {copixFormInput dao="news" property="title_news"}
  </td>
 </tr>
 <tr>
  <td>
  {* Ce champ représente un lien sur la clef étrangère *}
  {copixFormInput dao="news" property="id_news" comboCaptions="caption_newc;date_newc"}
  </td>
 </tr>
 <tr>
  <td>
  {* Ce champ représente une valeure sélectionnable depuis une liste de constantes (pour l'exemple) *}
  {copixFormInput dao="news" property="type_news" comboValues=$values}
    ou
  {copixFormInput dao="news" property="type_news" comboValues="[Key=>Value][Key=>Value][key=>Value]"}
    ou
  {copixFormInput dao="news" property="type_news" comboValues="[Value][Value][Value]"}
  </td>
 </tr>
 <tr>
  <td>
  {* Ce champ est tout neuf et ne corresponds à aucune DAO *}
  {copixFormInput name="confirm" captioni18n="confirm.title.news" regexp="" maxlength=""}
  </td>
 </tr>
</table>
{copixForm type="end"}

 

Dans l'ActionGroup

Dans l'ActionGroup, cela poeut donner qqchose comme :



/**
* Préparation de l'élément à modifier
* @param : id_news l'identifiant de la nouvelle à modifier
*/

function doPrepareEdit (){
   //Récupération de la nouvelle
   $dao = CopixDAOFactory::create ('news');
   $newsRecord = $dao->get ($this->getRequest ('id_news'));

   //Création d'un identifiant de formulaire(pour pouvoir éditer plusieurs éléments en même temps)
   $id = CopixForm::createElement ();
   CopixForm::assignElement ($newsRecord);

   return new CopixActionReturn (COPIX_AR_REDIRECT, CopixUrl::get ('news|admin|edit', array ('copixFormId'=>$id)));
}

/**
* Page qui affiche le formulaire de modification
* @param CopixFormId l'identifiant de formulaire que l'on souhaite afficher
*/

function getEdit (){
   if (($id = $this->getRequest ('CopixFormId')) === null){
      retour vers doCreate.
   }

   $tpl = new CopixTpl ();
   $tpl->assign ('MAIN', CopixZone::process ('genericTools|CopixForm', array ('toEdit'=>CopixForm::getFormObject ($id))));
   return new CopixActionReturn (COPIX_AR_DISPLAY, $tpl);
}

/**
* Demande de création d'un élément pour un nouveau formulaire
*/

function doCreate (){
   //Création d'un identifiant de formulaire(pour pouvoir éditer plusieurs éléments en même temps)
   $id = CopixForm::createElement ();
   CopixForm::assignElement ($newsRecord);//on pourais considérer que si aucun ID passé en paramètre, alors on utilise le dernier id créée

   return new CopixActionReturn (COPIX_AR_REDIRECT, CopixUrl::get ('news|admin|edit', array ('copixFormId'=>$id)));
}

/**
* Validation des données du formulaire
* @param CopixFormId l'identifiant du formulaire
* @param l'ensemble des informations du formulaire que l'on souhaite valider
*/

function doValid (){
   if (($formCheckingResult = CopixForm::validForm ($this->vars)) !== true){
      return $this->process ('getEdit', array ('checkResult'=>$formCheckingResult));
   }
   //Ok, tout c'est bien passé, on peut passer à la suite, par exemple travailler sur le record obtenu
   $newsRecord = & CopixForm::getRecord ('news');
   $newsRecord->markStatus ('date');
   //...
}

 

Compléments divers

Q: Comment faire pour éditer deux élément en même temps ? R: CopixForm utilise un identifiant de formulaire en interne (celui référencé par CopixFormId dans les exemples). Chanque formulaire d'édition est donc indépendant et utilisable en simultané.

Q: Je veux ré-utiliser mon formulaire dans un autre contexte R: Je propose de conserver l'utilisation de Concept 1 des "form.xml", et donc de pouvoir référencer les formulaires XMLisés dans les templates. Ce que je propose finalement, c'est un système "rapide" pour les formulaires "simples". (donc ne pas avoir comme obligation la rédaction d'un form.xml)

Q: Et si j'ai plusieurs DAO ? R: Pas gênant en soit. Il suffit de mettre les inputs pour plusieurs DAO.

Q: j'ai des règles complexes de validation supplémentaires, comment faire ? R: je n'ai pas mis d'exemple dessu, mais je pense que nous pourions envisager des "formValidator" supplémentaires. Toutefois, le recours à ce genre de manipulation nécessitera la déclaration d'un "form.xml"