Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 17-04-2014 11:36:31

astro785
Membre
Date d'inscription: 08-04-2014
Messages: 40

Attributs de vue null

Bonjour smile

J'ai un problème lors de l'édition d'une ligne d'une table que l'on appellera 'codification'.
Ses enregistrements n'ont pas d'identifiants propres, mais sont identifiable grâce à un couple ('CDCOD'/'CLECOD').


J'ai une première vue qui liste toutes les codifications, exemple :

CDCOD     CLECOD    VALEUR
--------       ---------     --------
ORG              1             foo
ORG              2             bar
ORG              3
CATAGT         1
CATAGT         2             foo2
                     .
                     .
                     .

Quand je clique sur l'un des LIBCOD, ça m'emmène vers une page d'edition du style appli/editcodif/ORG/1, grâce à :

Code:

[lang=php]
<?php echo $this->url('liste', array('action' => 'editcodif','CDCOD' => $codif->CDCOD,'CLECOD' => $codif->CLECOD)); ?>

J'ai donc ma vue d'edition avec mon formulaire bindé qui fonctionne, pour ça j'ai modifié mes routes pour qu'elles acceptent le chemin  appli/action/CDCOD/CLECOD.

Le setAttribut du formulaire dans la vue ressemble donc à ça :

Code:

[lang=php]
$form->setAttribute('action', $this->url('liste', array('action' => 'editcodif','CDCOD' => $this->CDCOD,'CLECOD' => $this->CLECOD)));

Mon problème survient lors du submit, en effet quand je fais un dump de $this->CDCOD et $this->CLECOD sur ma vue, ils sont tous les deux à null, ce qui a pour effet de jeter une exception Row not found dans mon controlleur :

Code:

[lang=php]
public function editcodifAction() {
        $request = $this->getRequest();

        $sIdSource = ($request->isPost()) ? 'fromPost' : 'fromRoute';
        
        $cle = $this->params()->$sIdSource('CLECOD', 0);
        $code = $this->params()->$sIdSource('CDCOD', 0);
        
        var_dump($cle);var_dump($code);   //contiennent bien les valeurs des attributs de la route sur la page d'edition mais contiennet ensuite la valeur 0 après le submit.

        $codif = $this->getCodifTable()->getCodif($cle, $code); //ligne qui lance l'exception.

        $form = new editCodifForm();
        $form->bind($codif);

        if ($request->isPost()) {
            $form->setInputFilter($codif->getInputFilter());
            $form->setData(array('CLECOD' => $cle
                , 'CDCOD' => $code
                , 'LIBCOD' => $this->params()->fromPost('LIBCOD')
                , 'VALCOD1' => $this->params()->fromPost('VALCOD1')
                , 'VALCOD2' => $this->params()->fromPost('VALCOD2')
            ));
            if ($form->isValid()) {
                $this->getCodifTable()->saveEditedCodif($codif);
            }
        } else {

            $form->get('submit')->setAttribute('value', 'Editer');
            return array('cle' => $cle
                , 'form' => $form);
        }

Ici, var_dump($cle);var_dump($code) contiennent bien les valeurs des attributs de la route sur la page d'edition mais contiennent ensuite la valeur 0 après le submit.

J'ai d'ailleurs du mal à appréhender ces lignes :

Code:

[lang=php]
        $sIdSource = ($request->isPost()) ? 'fromPost' : 'fromRoute';
        
        $cle = $this->params()->$sIdSource('CLECOD', 0);
        $code = $this->params()->$sIdSource('CDCOD', 0);

J'ai donc deux questions :
Pourquoi les dump de $this->CDCOD et $this->CLECOD sur la vue me renvoient-ils null ? (Pour moi, le problème vient principalement de là )

A quoi sert le dernier morceau de code que j'ai linké ? Je me doute qu'il définit si la requête provient de la route ou du formulaire, mais dans quel cas met-il 0 dans $cle et $code ?

Merci de l'aide que vous pourrez m'apporter smile

Dernière modification par astro785 (17-04-2014 11:52:05)

Hors ligne

 

#2 17-04-2014 12:04:18

Orkin
Administrateur
Lieu: Paris
Date d'inscription: 09-12-2011
Messages: 1261

Re: Attributs de vue null

Salut, encore une fois ... L'action n'a rien à faire ailleurs que dans le router ..

Ensuite pour récupérer tes paramètres depuis l'url (mais qui sont spécifié dans la route) :

Code:

[lang=php]
$this->params('nomduparam', 'valeurpardefaut');

Ca suffit. Regardes comment fonctionne le plugin params wink. Je sais pas où tu as chopé ton bout de code mais c'est pas conseillé de faire comme ça.

Tu peux utiliser :

Code:

[lang=php]
$this->params('cle', 'valeurpardefaut') // pour récupérer depuis la route c'est un raccourci vers $this->params()->fromRoute('cle', 'valeurpardefaut');
$this->post(); // si ma mémoire est bonne te donne les infos du post
$this->params->fromUrl('cle', 'valeurpardefaut'); // récupère les paramètres depuis l'url (après le ?toto=titi)

Ensuite dans ta vue c'est normal que ça fonctionne pas tu retournes jamais CDCOD et CLECOD à la vue donc logique que ça soit null

Hors ligne

 

#3 17-04-2014 13:08:55

astro785
Membre
Date d'inscription: 08-04-2014
Messages: 40

Re: Attributs de vue null

Merci Orkin pour ces précisions big_smile

Pour l'action, de laquelle tu parles ? Parce que tous les morceaux de code que j'ai posté proviennent à 90% du quickstart officiel, que j'ai simplement réadapté à mes propres champs et attributs, même le :

Code:

[lang=php]
$sIdSource = ($request->isPost()) ? 'fromPost' : 'fromRoute';

Alors si on peut même pas avoir confiance dans les trucs officiels tongue

Je vais essayer de me débrouiller avec le pistes que tu m'as donné, je repasse si j'ai avancé ( ou non ) yikes

Hors ligne

 

#4 17-04-2014 13:44:38

Orkin
Administrateur
Lieu: Paris
Date d'inscription: 09-12-2011
Messages: 1261

Re: Attributs de vue null

Je parle des deux bouts de code qui font appel à l'aide de vue url : action => editcofi. Si t'aimes bien réécrire la même action partout alors que ça peut être fait qu'à un seul c'est ton choix big_smile.

Bah c'est peut être dans la doc mais dans ton cas tu sais que les paramètres viennent de la route même si t'es en post ils sont dans ton url de ton attribut action de ton formulaire donc ceci suffit :

Code:

[lang=php]
$this->params('cle', 'valeurpardefaut'); // qui est un alias de $this->params()->fromRoute('cle', 'valeurpardefaut');

Hors ligne

 

#5 17-04-2014 14:34:20

flobrflo
Membre
Lieu: Marseille
Date d'inscription: 26-04-2013
Messages: 376

Re: Attributs de vue null

C'est curieux...
1 topic sur 2, sur ce forum on retrouve [/:action] quelques part dans la discussion..

Pourtant sur la doc ça n'apparait qu'une seule petite fois,..

Hors ligne

 

#6 17-04-2014 14:41:58

Orkin
Administrateur
Lieu: Paris
Date d'inscription: 09-12-2011
Messages: 1261

Re: Attributs de vue null

En fait quand je me suis formé sur le ZF2 ça ne devait pas y être dans la doc du coup j'ai pris l'habitude de ne pas le faire et c'est mieux (de pas le faire). J'ai vu pas mal de monde préciser l'action dans l'url. Au final l'appli n'a qu'une seule route et pour maintenir c'est super galère. Imagines pour une raison X ou Y tu renommes l'action d'un contrôleur faut repasser sur TOUTE l'appli pour modifier tous les appels à cette action alors que dans le router c'est à un seul endroit wink

Hors ligne

 

#7 17-04-2014 15:09:49

Splyf
Membre
Date d'inscription: 24-10-2013
Messages: 115

Re: Attributs de vue null

Salut,

pardon, je passais simplement par la mais  j'ai vue de la lumière et j'ai entendu des drôle d'histoire alors je suis rentrer ^^

pour le

Code:

$this->url('maroute', ['action=>'monaction])

Si tu ne veut pas l'utiliser dans les vue ou ailleurs, sa veut dire que dans le routeur tu défini une route par action ? (pas un peut lourd si tout les action d'un controller on leur paramètre en commun ? )
D'un autre coté pour quel raison renommé une action ? tu peut vouloir redéfinir une url, mais s'a n'oblige en rien de renommé le nom de l'action, non? Bon ok je cherche la petite bête, mais c'est pour bien comprendre ^^.
Pour moi c'est comme renommé le nom d'une méthode ou d'une fonction...bien obligé de repassé partout.

En faite

Hors ligne

 

#8 17-04-2014 15:10:46

flobrflo
Membre
Lieu: Marseille
Date d'inscription: 26-04-2013
Messages: 376

Re: Attributs de vue null

We je suis d'accord.
Mais vu le nombre de fois que ça apparait sur le web... comment ils font pour tous utiliser cet action alors?
astro est pas le seul.

Ils devraient pas le changer sur la doc d'ailleurs? Ça éviterait pas mal de cas comme ça.

Hors ligne

 

#9 17-04-2014 15:13:50

flobrflo
Membre
Lieu: Marseille
Date d'inscription: 26-04-2013
Messages: 376

Re: Attributs de vue null

En faite c'est surtout une question de "Sens".
quand t'a deux gosses, t’essaie de les personnaliser un peu chacun non? smile
Ou tu préfère qu'ils soient strictement pareil et vérifier à chaque fois qui est qui?

Bah la c'est pareil ^^
Tu pourrais effectivement mettre tout ton site dans la même route et à chaque fois vérifier quelle url tu a appelé.
Mais bon.. c'est chiant quoi...

Hors ligne

 

#10 17-04-2014 16:12:26

Splyf
Membre
Date d'inscription: 24-10-2013
Messages: 115

Re: Attributs de vue null

roft, c'est ma manie de trop vouloir factorisé ^^
Je considère que dans un même controller, tout le monde a besoin des même paramètre, sinon y'a des jaloux, sa se dispute, et je me sent obligé de distribuer des baffs pour leur apprendre a partager ^^

si mes action son mes gosses, c'est pas parce que je leur donne la même chose a mangé que je ne les personnalisé pas, il ne font pas du tout la même chose :p

Je ne trouve pas utile d'appeler un parametre identifiant "nomRené" pour une action et un autre identifiant "nomFrancis" pour une autre, je l'appelle "nom" et j'optidrai respectivement les valeur "René" et "Francis" (bon ok pas parlant mais c'est pour rester dans le thème ^^).
Et si je veut des parametre qui leur sont propre -> child_routes!
Dans mon controller je peut ainsi faire des methode getNom(), getId(), getMetpasTesCoudeSurLaTableNomMaisHo(). Je trouvai sa censé jusqu'ici hmm

Hors ligne

 

#11 17-04-2014 16:27:06

Orkin
Administrateur
Lieu: Paris
Date d'inscription: 09-12-2011
Messages: 1261

Re: Attributs de vue null

En fait quand tu renommes une fonction l'IDE est capable de retrouver les appels à cette fonction et les modifier partout. Pour les actions c'est un peu différent parce que tu mélanges des chaines de caractères dans des tableaux via de la conf et des noms de fonction.

Après tu fais comme tu veux si tu préfères faire comme ça tu peux mais c'est moins pratique. C'est plus performant de faire plein de route qu'une seule grosse smile. Surtout si tu utilises les priorités et tout. Mais oui tu vas te retrouver avec plein de routes comme ceci :
/user (route mère)
/user/consult/:id
/user/edit/:id
/user/add

/profil
/profil/consult/:id
/profil/edit/:id
/profil/add

Hors ligne

 

#12 17-04-2014 17:37:01

astro785
Membre
Date d'inscription: 08-04-2014
Messages: 40

Re: Attributs de vue null

Je peux pas trop rebondir sur le débat vu que je suis encore un peu dans les choux, ça n'est que mon premier projet avec Zend, et malgrès tout je commence à entrevoir les différentes possibilités, le gain de temps en dev et en maintenance qu'il pourrait m'apporter, donc les erreurs que je fais maintenant je ne les referai pas dans un prochain projet smile

Ca sort complétement du sujet ( quoi que ), mais pour l'ajout d'une codification dont le CDCOD existe déjà, je dois calculer le MAX de mon champs CLECOD pour pouvoir l'insérer correctement (ben oui), est ce que quelqu'un qui utilise ou a utilisé Zend/Db peut me dire comment je peux faire ça ?

Ca fait des heures que j'essaye, et je n'arrive pas à trouver hmm

Pour le moment j'ai ça :

Code:

[lang=php]
    public function getMax($code)
    {
       $sql = new Sql($this->adapter);
       $select = $sql->select();
       $select->columns(array(new Expression('max(CLECOD) as CLECOD')))->where->equalTo('codif.CDCOD', $code);
       $rowset = $this->selectWith($select);

       if (!$row = $rowset->current())
        {
            throw new \Exception('Row not found');
        }
        return $row;
    }

C'est là que je regrette de pas avoir intégré Doctrine dès le départ big_smile

Dernière modification par astro785 (17-04-2014 17:38:01)

Hors ligne

 

#13 18-04-2014 09:49:17

Splyf
Membre
Date d'inscription: 24-10-2013
Messages: 115

Re: Attributs de vue null

C'est là que je regrette de pas avoir intégré Doctrine dès le départ big_smile

Tu la dit bouffie, Doctrine ma mis une semaine la tête dans le chou mais depuis je regrette vraiment, mais alors vraiment pas! Alors que je ne le maîtrise encore pas complètement et loin de la ^^
Si tu a du temps pour te formé comme ce fu mon cas (j'insite car c'est consomateur de temps quand même) , je te conseille de te penché dessus, mais attention tu va nagé dans le paté quelque heure au début! après, sa devient l'imbide comme de l'eau de roche.

Dernière modification par Splyf (18-04-2014 09:49:45)

Hors ligne

 

#14 18-04-2014 10:43:32

flobrflo
Membre
Lieu: Marseille
Date d'inscription: 26-04-2013
Messages: 376

Re: Attributs de vue null

Perso j'ai commencé Zend avec doctrine direct (pas eu le choix arrivé en stage paf.. xD)
Je saurais même pas faire sans enfait.. xD

alors t'a pas besoin de equalto:

Code:

[lang=php]
->where(array('codif.CDCOD'=> $code))

après je suis pas sur, mais j'ai pas l'impression que tu lui ai dit dans quelle table chercher ton max(****), j'utilise pas le sql adapter, mais tu doit avoir quelque chose comme : $sql->from('ma_table')


Pour revenir vite fait sur le débat (inutile mais bon.. =d)
donner la même route à deux "gosses" c'est pas juste les faire manger les mêmes choses. c'est aussi les habits, la coiffure, le sac à dos et tout...
Alors toi ça te dérangera p'tet pas (si si c'est possible)

Mais bon.. pense à eux... Ils seront plus heureux si tu leurs offre un jouet chacun wink

Hors ligne

 

#15 18-04-2014 12:37:49

Splyf
Membre
Date d'inscription: 24-10-2013
Messages: 115

Re: Attributs de vue null

+1 pour le eQualTo et le from('matable'), mais concrètement quel est le problème? quel sont les messages d'erreur? le résultat afficher? sa pourrai aidé smile

Pour le débat, je ne remettait pas en question pour faire le malin, mais pour bien comprendre, on est plus efficace ainsi que quand on applique bêtement ^^
Allez op, je pense qu'il faut que je mette en application pour voir l'avantage, la pratique vos parfois mieux qu'un master universitaire ^^

Hors ligne

 

#16 18-04-2014 13:20:40

Bouks
Membre
Lieu: Paris
Date d'inscription: 31-08-2012
Messages: 241

Re: Attributs de vue null

Orkin a écrit:

En fait quand je me suis formé sur le ZF2 ça ne devait pas y être dans la doc du coup j'ai pris l'habitude de ne pas le faire et c'est mieux (de pas le faire). J'ai vu pas mal de monde préciser l'action dans l'url. Au final l'appli n'a qu'une seule route et pour maintenir c'est super galère. Imagines pour une raison X ou Y tu renommes l'action d'un contrôleur faut repasser sur TOUTE l'appli pour modifier tous les appels à cette action alors que dans le router c'est à un seul endroit wink

Dans netbeans :

Edit -> replace in projects

$this->url('toto', ['action' => 'actionX']);

par

$this->url('toto', ['action' => 'actionY']);


Vive l'informatique.


22914720

Hors ligne

 

#17 18-04-2014 14:22:59

flobrflo
Membre
Lieu: Marseille
Date d'inscription: 26-04-2013
Messages: 376

Re: Attributs de vue null

Nan mais bouks, on à jamais dit que c'était pas possible, chacun fait comme il veut, mais sémantiquement parlant...
Il y a plus de sens à ne pas mettre la paramètre action dans ta route plutot que dans ton controleur enchainner les if pour savoir quoi afficher, ou quelle action faire.

Hors ligne

 

#18 18-04-2014 16:07:44

Bouks
Membre
Lieu: Paris
Date d'inscription: 31-08-2012
Messages: 241

Re: Attributs de vue null

flobrflo a écrit:

... dans ton controleur enchainner les if pour savoir quoi afficher, ou quelle action faire.

Mais de quoi parles-tu ?
Je n'ai jamais eu besoin d’enchaîner des if ?

Tu as un exemple parce que ta réponse me surprends énormément ?


Effectivement chacun fait comme il veut. Moi je préfère développer que pisser de la conf au kilomètre. big_smile

Dernière modification par Bouks (18-04-2014 16:11:36)


22914720

Hors ligne

 

#19 18-04-2014 16:16:24

flobrflo
Membre
Lieu: Marseille
Date d'inscription: 26-04-2013
Messages: 376

Re: Attributs de vue null

bah chais pas un truc tout con:
sur une route de type:

mondomaine.com/produit[/:action]/id

tu va avoir dans ton controlleur:

Code:

[lang=php]
interagirProduitaction(){
$action = ...
if($action = add){
 addproduct;
afficher success/afficher fail
}
else if ($action = edit){
 editProduct
afficher fail/ afficher success
}
else if($action == delete){
 deleteProduct
afficher fail/ afficher success
}
else if ($action = moove){
...
...

à lire c'est chiant, à écrire t'imagine pas.. xD
Fin bon tu vois l'idée.

EDIT : marrant delete s'affiche d'une autre couleur =o

Dernière modification par flobrflo (18-04-2014 16:18:27)

Hors ligne

 

#20 18-04-2014 16:19:17

Bouks
Membre
Lieu: Paris
Date d'inscription: 31-08-2012
Messages: 241

Re: Attributs de vue null

Non je ne vois pas du tout l'idée.

Pourquoi tu n'utilises tout simplement pas des fonctions 'addAction', 'editAction", etc. ????


22914720

Hors ligne

 

#21 18-04-2014 16:23:22

flobrflo
Membre
Lieu: Marseille
Date d'inscription: 26-04-2013
Messages: 376

Re: Attributs de vue null

Code:

[lang=php]
interagirProduitaction(){
$action = ...
if($action = add){
 addAction();
}
else if ($action = edit){
 editAction();
}
else if($action == delete){
 deleteAction();
}
else if ($action = moove){
...
...

genre ça?

Hors ligne

 

#22 18-04-2014 16:28:00

Bouks
Membre
Lieu: Paris
Date d'inscription: 31-08-2012
Messages: 241

Re: Attributs de vue null

Non genre :

Code:

[lang=php]
public function addAction(){
  // ajouter un produit
}
public function editAction(){
  // éditer un produit
}

// etc.

Tout simplement.

Je ne vois pas à quoi sert ta fonction interagir...

Dernière modification par Bouks (18-04-2014 16:30:29)


22914720

Hors ligne

 

#23 18-04-2014 16:30:49

Orkin
Administrateur
Lieu: Paris
Date d'inscription: 09-12-2011
Messages: 1261

Re: Attributs de vue null

Eu non je pense que t'es dans les choix là :p.

L'action dans le paramètre url sert justement à indiquer quel action tu vas appeler dans ton contrôleur. Donc pas d'étape if/else. C'est juste que c'est chiant à refactorer mais toujours possible effectivement en analysant le projet. Là le problème c'est surtout que les routes sont pas découpées et que tu perds du temps à réécrire la même action partout.

Hors ligne

 

#24 18-04-2014 16:33:02

Bouks
Membre
Lieu: Paris
Date d'inscription: 31-08-2012
Messages: 241

Re: Attributs de vue null

Orkin a écrit:

tu perds du temps à réécrire la même action partout.

C'est à dire ?


22914720

Hors ligne

 

#25 18-04-2014 16:41:41

flobrflo
Membre
Lieu: Marseille
Date d'inscription: 26-04-2013
Messages: 376

Re: Attributs de vue null

AH mais we chui trop con lol.
fin de journée dur dur.. xD

Hors ligne

 

Pied de page des forums

Propulsé par PunBB
© Copyright 2002–2005 Rickard Andersson
Traduction par punbb.fr

Graphisme réalisé par l'agence Rodolphe Eveilleau
Développement par Kitpages