Quick links: Content - sections - sub sections
EN FR
Quick Search Advanced search
 
Page

  [Opened] Petite modification du controller CRUD

Posted by lionelb on 02/12/2016 01:26

Bonjour,

Premier message dans le forum :) j'ai le trac... ^^

J'ai créé avec la ligne de commande un contrôleur DaoCrud pour administrer la table "objets" dans le backend de mon application (master_admin). J'ai un paramètre supplémentaire "rubrique" que je passe dans mon url, qui me permet de n'afficher dans la liste que les objets appartenant à une certaine rubrique (j'ai mis un lien pour chaque rubrique dans le menu).

Je dois propager ce paramètre dans toutes les étapes de la navigation. Par exemple, quand on visualise un objet puis que l'on clique sur le lien "retour à la liste", on doit revenir à la liste filtrée sur la rubrique.

J'ai pu propager ce paramètre dans tous les cas sauf dans un cas : L'utilisateur crée ou édite un objet, fait une erreur dans le formulaire (par exemple il ne remplit pas un champs required), arrive finalement à compléter son formulaire et le valide. J'ai du rajouter et appeler une fonction dans le fichier jControlleurDaoCrud.class.php :

class jControllerDaoCrud extends jController {
    
     ...

    /**
     * save data of a form in a new record
     */
    function savecreate(){
        $form = $this->_getForm();
        $rep = $this->getResponse('redirect');
        if($form == null){
            $rep->action = $this->_getAction('index');
            return $rep;
        }
        $form->initFromRequest();

        if($form->check() && $this->_checkData($form, false)){
            $results = $form->prepareDaoFromControls($this->dao,null,$this->dbProfile);
            extract($results, EXTR_PREFIX_ALL, "form");//use a temp variable to avoid notices
            $this->_beforeSaveCreate($form, $form_daorec);
            $form_dao->insert($form_daorec);
            $id = $form_daorec->getPk();
            $rep->action = $this->_getAction('view');
            $rep->params['id'] = $id;
            $this->_afterCreate($form, $id, $rep);
            if ($this->uploadsDirectory !== false)
                $form->saveAllFiles($this->uploadsDirectory);
            jForms::destroy($this->form);
            return $rep;
        } else {
            $rep->action = $this->_getAction('create');



            // J'ai besoin d'un point d'entrée dans la fonciton ici
            // pour pouvoir modifier la réponse !
            $this->_afterCreateCheckFailed($form, $id, $rep);__



            return $rep;
        }
    }

    // le nouveau point d'entrée ...
    protected function _afterCreateCheckFailed($form, $id, $resp) {__
    }

    ...
}

(Et similairement pour l'update bien sûr)

Et maintenant je peux utiliser ce point d'entrée pour propager ma rubrique convenablement :

class objetsCrudCtrl extends jControllerDaoCrud {
    ...
    protected function _afterCreateCheckFailed($form, $id, $resp) {
    	$resp->params['rubrique'] = $this->param('rubrique');
    }
    ...
    protected function _afterUpdateCheckFailed($form, $id, $resp) {
    	$resp->params['rubrique'] = $this->param('rubrique');
    }
    ...
}

Je pense avoir eu la bonne démarche, votre avis ?

Si oui, je pense que ça mérite un patch.

merci !

Lionel :)

  [Opened] Petite modification du controller CRUD

Reply #1 Posted by laurentj on 02/22/2016 19:08

Bonjour,

Ça peut être intéressant.

Pour les contributions, ça [se passe par là](https://github.com/jelix/jelix/blob/master/CONTRIBUTING.md) ;-) (sur la branche 1.6.x pour ton cas).

 
Page
  1. Petite modification du controller CRUD