Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#26 10-04-2014 11:28:18

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

Re: [RESOLU] Plusieurs mêmes formulaires pré-remplis sur une seule vue

J'avance, en faisant un dump de ma variable $site que j'essaye de bind, voici ce qu'il me sort:

Code:

[lang=php]
object(Liste\Model\Liste)[240]
  public 'id' => null
  public 'nomsite' => null
  protected 'inputFilter' => null

D'où les champs vides.

En revanche lorsque je fais un dump de la variable $album qui elle est bind correctement, j'ai ceci :

Code:

[lang=php]
object(Album\Model\Album)[263]
  public 'id' => string '2' (length=1)
  public 'artist' => string 'Adele' (length=5)
  public 'title' => string '21' (length=2)
  public 'duree' => string '100' (length=3)
  protected 'inputFilter' => null

Maintenant reste à trouver pourquoi mon objet $site est nul smile

Dernière modification par astro785 (10-04-2014 11:29:21)

Hors ligne

 

#27 10-04-2014 11:42:55

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

Re: [RESOLU] Plusieurs mêmes formulaires pré-remplis sur une seule vue

(je débarque, j'ai lu un peu vite fait ^^)

ta variable $sites est bonne? c'est avant le bind que $site est vide?

Hors ligne

 

#28 10-04-2014 13:44:27

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

Re: [RESOLU] Plusieurs mêmes formulaires pré-remplis sur une seule vue

Problème réglé, cela venait de ma fonction exchangeArray()

Code:

[lang=php]
$this->id = (isset($data['IDSITE'])) ? $data['IDSITE'] : null;
        $this->nomsite = (isset($data['LIBSITE'])) ? $data['LIBSITE'] : null;
        $this->adressesite = (isset($data['ADRSITE'])) ? $data['ADRSITE'] : null;
        $this->CPsite = (isset($data['CDPOST'])) ? $data['CDPOST'] : null;
        $this->villesite = (isset($data['VILLE'])) ? $data['VILLE'] : null;
        $this->surfacesite = (isset($data['SURFSITE'])) ? $data['SURFSITE'] : null;
        $this->statutsite = (isset($data['LIBCOD'])) ? $data['LIBCOD'] : null;
        $this->cdstatutsite = (isset($data['IDSTATUT_'])) ? $data['IDSTATUT_'] : null;
        $this->placesparkingsite = (isset($data['NBPARKING'])) ? $data['NBPARKING'] : null;
        $this->observationsite = (isset($data['OBSSITE'])) ? $data['OBSSITE'] : null;
        $this->codelocsite = (isset($data['CDLOCAL'])) ? $data['CDLOCAL'] : null;
        $this->codecolsite = (isset($data['CDCOLBERT'])) ? $data['CDCOLBERT'] : null;
        $this->cadastresite = (isset($data['CDCADA'])) ? $data['CDCADA'] : null;
        $this->vacantsite = (isset($data['VACANT'])) ? $data['VACANT'] : null;
        $this->estimsite = (isset($data['ESTIM'])) ? $data['ESTIM'] : null;

Dans les $data['CHAMP'] je ne mettais pas le nom des champs de ma base, mais d'autres noms qui n'avaient rien à voir :x

Hors ligne

 

#29 10-04-2014 15:19:50

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

Re: [RESOLU] Plusieurs mêmes formulaires pré-remplis sur une seule vue

Du coup j'ai un doute, malgrés que ça marche ça me semble étrange.

Dans le $data c'est bien le nom des champs de la base de donnée ? neutral

Hors ligne

 

#30 10-04-2014 15:21:51

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

Re: [RESOLU] Plusieurs mêmes formulaires pré-remplis sur une seule vue

Evites le double poste wink. Tu peux éditer !!

Si $data c'est le retour de la requête (ce qui est normalement le cas) oui.

Hors ligne

 

#31 10-04-2014 15:38:46

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

Re: [RESOLU] Plusieurs mêmes formulaires pré-remplis sur une seule vue

Oui excuse moi du micro-flood big_smile

J'y comprends plus rien, si je fais :

Code:

[lang=php]
$this->nomsite = (isset($data['LIBSITE'])) ? $data['LIBSITE'] : null;

Où LIBSITE est le nom du champs contenant le nom du batiment dans ma table batiment : L'affichage de ma vue de gestion de batiments marche (tous les champs sont préremplis)

MAIS

L'ajout d'un nouveau batiment ne marche plus ( il est bien crée dans la base mais avec tous les champs à null )

En revanche, si je fais :

Code:

[lang=php]
$this->nomsite = (isset($data['nomsite'])) ? $data['nomsite'] : null;

Où nomsite est le nom du champs du formulaire ( ce qui me parait plus logique ), là l'ajout refonctionne ( l'insert est correctement fait, tous les champs de ma table prennent les valeurs indiquées dans le form )

MAIS

L'affichage de ma vue de gestion de batiment ne fonctionne plus et j'ai de nouveau tous les champs vides ( car l'objet à partir duquel le form est crée a tous ses attributs à null ).

J'ai l'impression de me mélanger les pinceaux entre les noms des formulaires, les noms des champs de la base et les noms des attributs de mes objets batiments. neutral

D'un côté dans album ils utilisent le même mot pour tous, exemple le champs dans la base s'appelle title, le nom du champ du formulaire s'appelle title, l'attribut d'instance de album s'appelle title, donc difficile d'y voir clair sur qui est quoi yikes

Dernière modification par astro785 (10-04-2014 15:44:07)

Hors ligne

 

#32 10-04-2014 15:43:58

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

Re: [RESOLU] Plusieurs mêmes formulaires pré-remplis sur une seule vue

C'est simple ta fonction exchangeArray est là pour remplir ton objet à partir d'un tableau donc si tu donnes pas le même à chaque fois ça peut pas marcher. Soit tu changes les noms de tes input dans ton formulaire pour qu'ils soient les mêmes qu'en base soit tu fais une deuxième méthode.

Hors ligne

 

#33 10-04-2014 15:46:05

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

Re: [RESOLU] Plusieurs mêmes formulaires pré-remplis sur une seule vue

Il faut que les inputs aient le même nom que les champs dans la base ? ><
POURQUOI ? big_smile

Hors ligne

 

#34 10-04-2014 15:49:47

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

Re: [RESOLU] Plusieurs mêmes formulaires pré-remplis sur une seule vue

Je viens de te l'expliquer ...

Hors ligne

 

#35 10-04-2014 15:50:20

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

Re: [RESOLU] Plusieurs mêmes formulaires pré-remplis sur une seule vue

Par ce que sinon ton application aura du mal à faire la liaison toute seule sans que tu lui disent quoi matcher avec quoi smile

Hors ligne

 

#36 10-04-2014 16:44:20

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

Re: [RESOLU] Plusieurs mêmes formulaires pré-remplis sur une seule vue

Bon ben voilà, en ayant tout renommé ( noms des inputs, noms des attributs d'instances etc ) par le noms des champs dans la base, tout semble fonctionner. smile

N'empêche que c'est marqué nul part et que c'est pas forcément évident pour un néophyte hmm

Merci beaucoup à vous en tout cas !

Hors ligne

 

#37 10-04-2014 22:15:30

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

Re: [RESOLU] Plusieurs mêmes formulaires pré-remplis sur une seule vue

Ca n'a pas besoin d'être documenté. C'est normal que lorsque tu fais une méthode qui rempli un objet à partir d'un tableau que lorsque le tableau ne comporte pas les index que tu tests que ça fonctionne pas. Ca n'a rien à voir avec le ZF c'est de la logique de dev classique.

Si tu fais ça $maVariable = $monArray['value'] et que $monArray['value'] n'existe pas $maVariable ne pourra pas prendre cette valeur.

Hors ligne

 

#38 11-04-2014 15:04:36

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

Re: [RESOLU] Plusieurs mêmes formulaires pré-remplis sur une seule vue

Certes, on mettra ça sous le compte de mon manque d'expérience en dev ( j'ai seulement deux ans de DUT derrière moi, je suis en stage et on m'oblige à utiliser Zend, donc pas facile ) smile

J'aurais une autre question, maintenant que tout fonctionne j'aimerai que l'appuie sur le bouton submit me redirige sur la même page, parce que pour le moment cela me redirige sur mon index.

A la fin de mon editAction dans mon controlleur, j'ai donc tenté de faire un :

Code:

[lang=php]
return $this->redirect()->refresh();

Mais cela m'amène vers une page d'erreur " Row not found" ( mais la modification est quand même effectuée )

En revanche si je mets :

Code:

[lang=php]
return $this->redirect()->toUrl('http://localhost/appli/liste/gestion');

Je retombe bien sur ma page et la modification est effectuée, mais je ne peux pas laisser ça comme ça étant donné que l'application ne restera pas indéfiniment sur mon localhost big_smile

Y'a t'il une instruction qui permet de faire cela ?

Dernière modification par astro785 (11-04-2014 15:05:33)

Hors ligne

 

#39 11-04-2014 15:09:09

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

Re: [RESOLU] Plusieurs mêmes formulaires pré-remplis sur une seule vue

Code:

[lang=php]return $this->redirect()->toRoute('nomdelaroute');

Hors ligne

 

#40 11-04-2014 15:14:25

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

Re: [RESOLU] Plusieurs mêmes formulaires pré-remplis sur une seule vue

J'ai essayé

Code:

[lang=php]
return $this->redirect()->toRoute('gestion');

Mais il me dit que la route n'existe pas hmm

Mon module.config.php ressemble à ça :

Code:

[lang=php]
'router' => array(
        'routes' => array(
            'liste' => array(
                'type'    => 'segment',
                'options' => array(
                    'route'    => '/liste[/:action][/:id]',  // <---- url format module/action/id
                    'constraints' => array(
                        'action' => '[a-zA-Z][a-zA-Z0-9_-]*',
                        'id'     => '[0-9]+',
                    ),
                    'defaults' => array(
                        'controller' => 'Liste\Controller\Liste',  // <--- Defined as the module controller
                        'action'     => 'index',                   // <---- Default action
                    ),
                ),
            ),
        ),
    ),

Je dois recréer une route pour gestion ?

Hors ligne

 

#41 11-04-2014 15:20:11

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

Re: [RESOLU] Plusieurs mêmes formulaires pré-remplis sur une seule vue

Ben oui, sinon tu appel une route qui n'existe pas.
la seule que tu ai actuellement est la route liste.

EDIT: en enlevant le paramètre d'action et le remplacant par une child route gestion

Dernière modification par flobrflo (11-04-2014 15:21:01)

Hors ligne

 

#42 11-04-2014 15:25:13

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

Re: [RESOLU] Plusieurs mêmes formulaires pré-remplis sur une seule vue

Je veux bien apporter de l'aide par contre fais au moins l'effort de chercher et lire la doc parce que je vais te laisser chercher wink. Là c'est simplement du bon sens c'est logique qu'en appelant une route qui n'existe pas ça ne fonctionne pas ... Tu as déjà essayé d'ouvrir une porte qui n'existe pas ? Bon bah là c'est pareil avant de l'ouvrir tu en mets une ...

Hors ligne

 

#43 11-04-2014 15:32:31

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

Re: [RESOLU] Plusieurs mêmes formulaires pré-remplis sur une seule vue

Wow quelle comparaison =o
chapeau ^^

Hors ligne

 

#44 11-04-2014 16:29:20

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

Re: [RESOLU] Plusieurs mêmes formulaires pré-remplis sur une seule vue

Si elle existe pas j'ai pas besoin d'en mettre une pour passer big_smile

en enlevant le paramètre d'action et le remplacant par une child route gestion

Si je fais ça, je risque de ne plus pouvoir accéder à 'http://localhost/sial/liste/add' par exemple, non ?
Je pensais que la regexp me permettait de ne pas avoir à déclarer toutes les routes que j'utilise ?

J'ai tenté ça mais sans grand succès, j'assimile assez mal le concept ( me tape pas Orkin big_smile )

Code:

[lang=php]
    // The following section is new and should be added to your file
    'router' => array(
        'routes' => array(
            'liste' => array(
                'type'    => 'segment',
                'options' => array(
                    'route'    => '/liste[/:action][/:id]',  // <---- url format module/action/id
                    'constraints' => array(
                        'action' => '[a-zA-Z][a-zA-Z0-9_-]*',
                        'id'     => '[0-9]+',
                    ),
                    'defaults' => array(
                        'controller' => 'Liste\Controller\Liste',  // <--- Defined as the module controller
                        'action'     => 'index',                   // <---- Default action
                    ),
                ),
                
                'child_routes' => array(
                        'gestion' => array(
                            'type' => 'Literal',
                            'options' => array(
                                'route' => '/gestion',
                                'defaults' => array(
                                    'action' => 'gestion',
                                ),
                            ),
                        ),
                    ),
            ),
        ),
    ),

Fatal error: Uncaught exception 'Zend\Mvc\Router\Exception\RuntimeException' with message 'Part route may not terminate'

Dernière modification par astro785 (11-04-2014 16:30:51)

Hors ligne

 

#45 11-04-2014 16:37:03

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

Re: [RESOLU] Plusieurs mêmes formulaires pré-remplis sur une seule vue

Les regex c'est crade dans les routes et niveau perfs ... Il est conseillé de déclarer toutes ses routes et pour les routes plus ou moins utilisées mettre des priorités différentes. Le router du ZF2 s'arrête dès qu'il trouve la route, le fait du mettre une priorité sur une route souvent utilisée va lui permettre de la trouver plus vite.

Bah lis la doc franchement le router c'est pas compliqué par rapport aux formulaires. Ton erreur elle est écrite. Il te dit que ta route "liste" n'a pas le droit de se terminer, donc que c'est une route mère qui n'est pas accessible comme ça. On les fait en général quand tu as un module de gestion utilisateur tu fais une route user qui pointe sur l'url /user mais qui n'est pas accessible, de cette façon elle a plein de route fille du genre list, update, add, delete. Du coup /user n'est pas accessible mais /user/list oui. Pour faire vraiment simple c'est pour éviter d'avoir à écrire à chaque fois l'url /user pour /user/add, /user/list etc ...
Pour régler ton problème il te suffit de rajouter 'may_terminate' => true au dessus de 'child_routes'

Hors ligne

 

#46 14-04-2014 11:48:52

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

Re: [RESOLU] Plusieurs mêmes formulaires pré-remplis sur une seule vue

Merci Orkin et flobrflo pour ces explications smile

J'ai donc suivi tes conseils et je me suis un peu renseigné sur les routes ce week end, mon module.config ressemble maintenant à ça ( j'ai pas encore viré les regexp et refais chaque route, mais je le ferai si tu dis que c'est pas super) :

Code:

[lang=php]
    'router' => array(
        'routes' => array(
            'liste' => array(
                'type'    => 'segment',
                'options' => array(
                    'route'    => '/liste[/:action][/:id]',  // <---- url format module/action/id
                    'constraints' => array(
                        'action' => '[a-zA-Z][a-zA-Z0-9_-]*',
                        'id'     => '[0-9]+',
                    ),
                    'defaults' => array(
                        'controller' => 'Liste\Controller\Liste',  // <--- Defined as the module controller
                        'action'     => 'index',                   // <---- Default action
                    ),
                ),
                'may_terminate' => true,
                'child_routes' => array(
                        'gestion' => array(
                            'type' => 'Literal',
                            'options' => array(
                                'route' => 'gestion',
                                'defaults' => array(
                                    'action' => 'gestion',
                                ),
                            ),
                        ),
                    ),
            ),
        ),
    ),

Mais maintenant, lorsque je fais "  return $this->redirect()->toRoute('gestion');  ", j'ai une erreur comme quoi cette route n'existe pas, alors que je pensais l'avoir correctement crée.

Un petit coup de main ? hmm

Dernière modification par astro785 (14-04-2014 11:52:08)

Hors ligne

 

#47 14-04-2014 11:57:42

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

Re: [RESOLU] Plusieurs mêmes formulaires pré-remplis sur une seule vue

Normal c'est une route fille donc il faut lui préciser qui est sa mère. Tu peux très bien avoir 50 routes add par exemple sauf que la route mère ne sera pas la même. Dans ton cas ta route gestion s'appelle liste/gestion

Hors ligne

 

#48 14-04-2014 13:03:55

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

Re: [RESOLU] Plusieurs mêmes formulaires pré-remplis sur une seule vue

Merci Orkin ! Il a l'air de bien trouver la route ce coup ci, seulement j'ai un nouveau message d'erreur :

Missing parameter "id"

Je suppose que c'est justement à cause de mes regexp, surtout du

Code:

'id'     => '[0-9]+'

J'ai essayé de le changer en [0-9]* pour qu'il ne soit plus obligatoire, mais ça n'a rien changé.

Tu penses que je devrais supprimer cette partie :

Code:

[lang=php]
'route'    => '/liste[/:action][/:id]',  // <---- url format module/action/id
                'constraints' => array(
                    'action' => '[a-zA-Z][a-zA-Z0-9_-]*',
                    'id'     => '[0-9]+',

Et toutes les déclarées en child ? Sachant qu'au final les seules routes dont je me sers pour le moment sont liste/add , liste/edit/id , liste/delete/id et liste/gestion.

Hors ligne

 

#49 14-04-2014 14:26:16

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

Re: [RESOLU] Plusieurs mêmes formulaires pré-remplis sur une seule vue

C'est évident. wink

Le paramètre action est à proscrire, trop de vérification inutile dans ton controleur alors que tu peu le faire en amont.

Hors ligne

 

#50 14-04-2014 15:53:05

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

Re: [RESOLU] Plusieurs mêmes formulaires pré-remplis sur une seule vue

Merci ça fonctionne wink

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