Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 08-04-2014 15:40:20

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

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

Salut tout le monde big_smile,

Vu que le titre n'est pas très explicite, je vais tenter d'exposer mon problème de manière claire ici, et pour ça, rien de mieux qu'un petit schéma :

http://zupimages.net/up/14/15/msnx.png

Je débute sur ZF2. Mon application consiste donc simplement à lister, ajouter, editer, supprimer,gérer des bâtiments.

Aucun problème pour les 4 premières actions, en revanche,j'ai beaucoup de problèmes pour ce qui est de "gérer" ( voir schéma smile )

Pour faire simple, c'est une vue ou j'aimerai implémenter la possibilité d'éditer plusieurs bâtiments en même temps, les champs sont pré-remplis grâce aux infos de ma base de données, et pour le moment j'aimerai juste que l'appuie sur le bouton submit mette à jours les champs correspondants dans ma base et me fasse revenir sur cette même page.

Pas très ergonomique oui je sais, j'aimerai bien plus tard n'avoir qu'un seul bouton submit qui met à jours uniquement les champs qui ont été modifié, mais ça viendra après.

Donc en gros, ma question est : comment mettre en place une liste de mêmes formulaires, préremplis grâce aux infos de ma bdd, et que l'appuie sur le bouton submit en fin de chaque formulaire mette à jours le bâtiment avec l'identifiant correspondant ?

Merci beaucoup  à ceux qui prendront la peine de lire et de répondre wink

Ps : j'aurai bien fourni du code, mais à part celui de mon formulaire je n'ai rien d'autre qui me semble intéressant, ne sachant même pas par quel côté aborder le problème. sad

Dernière modification par astro785 (15-04-2014 11:21:17)

Hors ligne

 

#2 08-04-2014 15:50:45

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

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

Salut, tu as un composant qui est prévu pour ça les Collections. Le plus simple c'est de créer un fieldset pour décrire le bâtiment (nom et adresse), tu ajoutes ce fieldset à ton formulaire en lui indiquant que c'est une collection. Lorsque tu vas bind tes données à ton formulaire celui-ci va pré-remplir les champs pour chaque bâtiments (si tu lui passes une liste de bâtiments forcément :p).
Le seul bémol avec cette technique c'est que tu vas te retrouver un qu'un seul bouton submit qui mettra tout à jour d'un coup.

Pour ton cas à ma connaissance il n'y a pas quelque chose qui le fait pour toi de base dans le ZF2 donc soit tu le fais à la oldschool et tu génères un formulaire pour chaque bâtiment directement dans la vue, soit tu le fais dans le contrôleur en créant une instance de ton contrôleur à chaque fois et en le pré-remplissant.

Hors ligne

 

#3 08-04-2014 16:06:26

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

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

Je t'avouerai que même après t'avoir relu 3 fois, il y a beaucoup de termes que tu utilises qui me sont étrangés, et pour quelqu'un qui comme moi a eu l'habitude de tout faire à la main sans passer par un framework, c'est une mécanique vraiment pas simple à comprendre ><

Je vais essayer de me débrouiller avec les éléments que tu as pu me donner, mais si tu arrives à être plus explicite pour un néophyte comme moi ( oui j'en demande beaucoup yikes), je te serai très reconnaissant !

Parce que à vrai dire, je ne sais même pas comment je vais organiser ma vue, mon controlleur, mon formulaire et comment tous vont s'articuler, je me suis basé essentiellement sur le tuto album jusqu'à maintenant. hmm

Dernière modification par astro785 (08-04-2014 16:08:56)

Hors ligne

 

#4 08-04-2014 16:21:10

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

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

Lis le reste de la doc au sujet des formulaires ça te donnera une meilleure visibilité sur ce que je t'ai dit déjà smile.

Ensuite il faut bien que tu assimiles le concept MVC, j'ai répondu il n'y a pas longtemps à ce sujet donc tu peux éventuellement faire une petite recherche (ça doit dater de la semaine dernière), ça devrait t'aider à y voir un peu plus clair smile. Après si tu as des questions n'hésites pas big_smile

Hors ligne

 

#5 09-04-2014 09:18:10

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

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

Le seul bémol avec cette technique c'est que tu vas te retrouver un qu'un seul bouton submit qui mettra tout à jour d'un coup.

Donc si je fais comme ça, l'envoi du formulaire fera un update sur chacune des lignes de ma table même celles qui n'ont pas été modifiées ? Ca ne va pas poser un problème de temps de requête ? J'ai une centaine de bâtiments dans ma base hmm

Pour ce qui est de la méthode oldschool, si je fais ça dans ma vue :

Code:

<?php foreach($batiments as $batiment) : ?>
      <form>
            <champsBatiment n>
            <submit associé>
      </form>

<?php endforeach; ?>

Ca marchera ? Mais du coup ça respecte absolument plus le modèle MVC hmm

Tant qu'à faire je préfère n'avoir qu'un seul bouton qui fasse 100 updates, même si ça prends du temps au moins ça respecte le modèle et c'est plus ergonomique.

Je repasserai dans la journée donner mon avancement, merci encore Orkin wink

Dernière modification par astro785 (09-04-2014 09:25:40)

Hors ligne

 

#6 09-04-2014 09:44:07

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

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

Là tu me laisses un doute, je sais plus si il vérifie si ça a été modifié avant de faire l'update ou s'il fait l'update dans tous les cas.

Oui ça fonctionnera ça sera à toi de faire le formulaire comme il faut. Après tu peux aussi instancier X formulaires dans ton contrôleur et les passer à la vue wink.

Hors ligne

 

#7 09-04-2014 10:32:16

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

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

Admettons que j'instancie tous mes formulaires dans mon controlleur, ça pourrait ressembler à ça (je reprends album) :

Code:

[lang=php]

public function gestionAction(){
  $request = $this->getRequest();

  $albums = $this->getAlbumTable()->fetchAll();

  foreach $albums as $album
  {

        $form = new AlbumForm();
        $form->bind($album);

        if ($request->isPost()){
            $form->setInputFilter($album->getInputFilter());
            $form->setData(array('id' => $id
                                ,'title' => $this->params()->fromPost('title')
                                ,'artist' => $this->params()->fromPost('artist')));
            if ($form->isValid()){
                $this->getAlbumTable()->saveAlbum($album);
            }
        }
        else {

            $form->get('submit')->setAttribute('value','Editer');
            return array( 'id' => $id
                        , 'form' => $form);
        }
        return $this->redirect()->toRoute('album');
  }
}

Là où je suis un peu perdu, c'est sur ce que je dois écrire dans ma vue pour afficher tous ces formulaires instanciés dans le controlleur hmm

Ps: comment on met le syntaxe highlighting ? big_smile

Hors ligne

 

#8 09-04-2014 10:36:34

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

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

astro785 a écrit:

Ps: comment on met le syntaxe highlighting ? big_smile

C'est écrit

Ajoutez [lang=php|phtml|javascript|sql|perl|xml|shell|html] au début de votre code pour activer le syntax highlighting

Oui par contre traite pas le post dans la même action et il faut ajouter tous les formulaires d'un coup à la vue.

Hors ligne

 

#9 09-04-2014 10:44:40

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

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

Le post sera traité par l'action associée au submit ? C'est d'ailleurs ça que j'avais pas trop compris dans le tuto album, le fait que dans editAction :

Code:

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

        $sIdSource = ($request->isPost()) ? 'fromPost' : 'fromRoute';
        $id = $this->params()->$sIdSource('id',0);

        $album = $this->getAlbumTable()->getAlbum($id);

        $form = new AlbumForm();
        $form->bind($album);

        if ($request->isPost()){
            $form->setInputFilter($album->getInputFilter());
            $form->setData(array('id' => $id
                                ,'title' => $this->params()->fromPost('title')
                                ,'artist' => $this->params()->fromPost('artist')));
            if ($form->isValid()){
                $this->getAlbumTable()->saveAlbum($album);
            }
        }
        else {

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

        return $this->redirect()->toRoute('album');

    }

Il traite à la fois la création du formulaire, son remplissage, le post, et l'action qui suit le submit neutral
Qu'est ce que tu entends par " il faut ajouter tous les formulaires d'un coup à la vue." ?

Hors ligne

 

#10 09-04-2014 10:55: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

Bah tu fais une route de type segment qui prend un id en paramètre.

Pour les ajouter à la vue tu vais genre dans ton foreach $formArray[] = $monform et ensuite à la fin pour renvoyer à la vue return new ViewModel(['mesForms' => $formArray])

Hors ligne

 

#11 09-04-2014 11:16:45

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

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

Parfait, tu m'as devancé mais c'est exactement ce que je pensais faire smile

Et désolé si mes questions semblent un peu bêtes, mais comme je l'ai dit c'est la première fois que j'utilise un framework et même si la doc est très complète c'est toujours plus simple d'avoir le retour de quelqu'un qui s'y connait vraiment et qui peut m'aiguiller dans la compréhension de tous les mécanismes, donc encore une fois merci de prendre le temps, ça m'aide beaucoup smile

Hors ligne

 

#12 09-04-2014 11:25:59

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

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

Pas de soucis, je suis un peu là pour ça aussi wink. Tant que ça n'est pas de l’assistanat et que ça permet de faire progresser c'est avec plaisir ! wink

Hors ligne

 

#13 09-04-2014 11:40:20

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

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

J'ai donc ça pour la partie controller :

Code:

[lang=php]
    public function testAction()
    {
        $formArray= array();
        $albums = $this->getAlbumTable()->fetchAll();
        foreach ($albums as $album)
        {
            $form = new AlbumForm();
            $form->bind($album);
            
            array_push($formArray,$form);
        }
        
        return new ViewModel (array(
                            'forms' => $formArray));
    }

Pour ce qui est de la route elle ressemble à ça :

Code:

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

Pour l'instant je me soucis pas de l'action qui va gérer le post et l'update, si je peux déjà avoir un rendu ça sera pas mal.

Donc dans ma vue, je pensais faire quelque chose comme ça :

Code:

[lang=php]
<?php foreach($forms as $form) {

        $form->setAttribute('action', $this->url(
            'album',
            array(
                'action' => 'edit',
                'id'     => $this->id,
            )
        ));
        $form->prepare();

        echo $this->form()->openTag($form);
        echo $this->formHidden($form->get('id'));
        echo $this->formRow($form->get('title'));
        echo $this->formRow($form->get('artist'));
        echo $this->formSubmit($form->get('submit'));
        echo $this->form()->closeTag();
}

Là où j'ai un gros doute, c'est pour l'utilisation du $this, l'instance courante ne veut rien dire ici pour moi, et je sais pas trop par quoi le remplacer pour afficher le formulaire du $form courant du foreach.

Dernière modification par astro785 (09-04-2014 11:55:35)

Hors ligne

 

#14 09-04-2014 11:47:34

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

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

Non effectivement $this correspond à la vue. Donc tu dois trouver un moyen de passer l'id pour chaque formulaire wink.

Hors ligne

 

#15 09-04-2014 12:08:34

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

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

http://zupimages.net/up/14/15/qgr4.png

Ca fonctionne ! Et l'appuie sur le bouton 'Go' fait correctement l'update dans ma base ! wink
Plus qu'à l'adapter à ma propre application.

Merci Orkin, je reviendrai sûrement ici, vu que je vais sûrement rencontrer d'autres problèmes dans la suite de mon développement.

Toujours est-il que j'y vois déjà plus clair sur le fonctionnement de Zend et sur comment tout ce petit monde s'articule big_smile

Dernière modification par astro785 (09-04-2014 12:09:01)

Hors ligne

 

#16 09-04-2014 13:58:00

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

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

Comme quoi, j'aurai pas été tranquille très longtemps smile

J'ai donc calquer le cheminement fait précédemment sur ma propre application, et je me retrouve avec une erreur au moment de bind le formulaire :

Notice: Array to string conversion in C:\wamp\www\sial\vendor\zendframework\library\Zend\Form\Fieldset.php on line 443

Zend\Form\Fieldset::setObject expects an object argument; received "Array"

Code:

[lang=php]
public function gestionAction() {
  $formArray= array();
  $sites = $this->getSiteTable()->getListeBatiments();
  foreach ($sites as $site)
        {
            $form = new ListeForm();
            $form->bind($site); // Ligne qui pose problème
            
            array_push($formArray,$form);
        }
        return new ViewModel (array(
                            'forms' => $formArray));       
}

Mon getListeBatiments() ressemble à ça :

Code:

[lang=php]
    public function getListeBatiments() {

        $sql = new Sql($this->adapter);
        $select = $sql->select();
        $select->from($this->table)
                ->join('codif', 'site.IDSTATUT_ = codif.CLECOD');

        $where = new Where();
        $where->equalTo('codif.CDCOD', 'STATUT');
        $select->where($where);
        $select->order(array('site.LIBSITE'));

        //you can check your query by echo-ing :
        // echo $select->getSqlString();
        $statement = $sql->prepareStatementForSqlObject($select);
        $result = $statement->execute();

        return $result;

Enfin, mon formulaire :

Code:

[lang=php]<?php

namespace Liste\Form;

use Zend\Form\Form;

class ListeForm extends Form {

    public function __construct($name = null) {
        // we want to ignore the name passed
        parent::__construct('liste');
        $this->setAttribute('method', 'post');
        $this->add(array('name' => 'id',
            'attributes' => array('type' => 'hidden')));

        $this->add(array('name' => 'nomsite',
            'attributes' => array('type' => 'text'),
            ));

        $this->add(array('name' => 'adressesite',
            'attributes' => array('type' => 'text'),
            ));

        $this->add(array('name' => 'CPsite',
            'attributes' => array('type' => 'text'),
            ));

        $this->add(array('name' => 'villesite',
            'attributes' => array('type' => 'text'),
            ));

        $this->add(array('name' => 'surfacesite',
            'attributes' => array('type' => 'text'),
            ));

        $this->add(array(
            'type' => 'Zend\Form\Element\Select',
            'name' => 'statutsite',
            'options' => array(
                
                'value_options' => array(
                    '1' => 'Option 1',
                    '2' => 'Option 2',
                    '3' => 'Option 3',
                    '4' => 'Option 4',
                    '5' => 'Option 5',
                    '6' => 'Option 6',
                    '7' => 'Option 7',
                ),
            )
        ));

        $this->add(array('name' => 'placesparkingsite',
            'attributes' => array('type' => 'text'),
            ));

        $this->add(array('name' => 'observationsite',
            'attributes' => array('type' => 'textarea'),
            ));



        $this->add(array('name' => 'codelocsite',
            'attributes' => array('type' => 'text'),
            ));

        $this->add(array('name' => 'codecolsite',
            'attributes' => array('type' => 'text'),
            ));

        $this->add(array('name' => 'cadastresite',
            'attributes' => array('type' => 'text'),
            ));

        $this->add(array(
            'type' => 'Zend\Form\Element\Checkbox',
            'name' => 'vacantsite',
            'options' => array(
                
                'use_hidden_element' => true,
                'checked_value' => '1',
                'unchecked_value' => '0'
            )
        ));

        $this->add(array('name' => 'estimsite',
            'attributes' => array('type' => 'text'),
            ));



        $this->add(array('name' => 'submit',
            'attributes' => array('type' => 'submit',
                'value' => 'Valider',
                'class' => 'btn btn-success',
                'id' => 'submitbutton')));
    }

}

Est ce qu'on peut m'expliquer comment le bind() fonctionne, pour les champs textes par exemple j'arrive à peu près à me l'imaginer mais quand est-il des <select>, des checkbox ( qui dans ma bdd prennent comme valeurs 0 ou 1, comment le transcrire en coché ou non ). Merci smile

EDIT : Je viens de changer le getListeBatiments() en fetchAll() (qui fait simplement return $this->select() ) ici :

Code:

[lang=php]
public function gestionAction() {
  $formArray= array();
  $sites = $this->getSiteTable()->fetchAll(); // ICI
  foreach ($sites as $site)
        {
            $form = new ListeForm();
            $form->bind($site); // Ligne qui pose problème
            
            array_push($formArray,$form);
        }
        return new ViewModel (array(
                            'forms' => $formArray));       
}

Et je n'ai plus de message d'erreur de php, il m'affiche bien ma vue avec ma suite de form, mais aucun n'est pré-rempli hmm

Dernière modification par astro785 (09-04-2014 14:05:07)

Hors ligne

 

#17 09-04-2014 14:12:14

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

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

En fait le bind attend un objet de type Batiment pas un array c'est pour ça que ça fonctionne pas. Donc à toi de convertir ton array en objet de type Batiment wink

Hors ligne

 

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

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

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

Ca marche je vais chercher mais dans ce cas là pourquoi avec fetchAll je n'ai plus l'erreur ?
Le $this->select() de fetchAll() me retourne un tableau d'objets ?
C'est à la fin de ma requête getListeBatiments() que je retourne un tableau ?
Et donc en faisant $sites = $this->getSiteTable()->getListeBatiments, $sites est un tableau de tableaux ?

J'avoue que j'ai du mal à comprendre neutral

Edit : La piste des ResultSet est-elle une bonne piste ? big_smile

Dernière modification par astro785 (09-04-2014 14:27:29)

Hors ligne

 

#19 09-04-2014 14:33:50

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

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

Là je saurais pas t'aider j'utilise pas Zend\Db, j'utilise Doctrine 2 donc ...

Hors ligne

 

#20 09-04-2014 15:03:10

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

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

Concrètement ça apporte quoi Doctrine ? Une gestion plus poussée de la base de donnée ? Ca vaut le coup que je m'arrache les cheveux à tenter de l'installer et surtout à tout réadapter ?
J'ai vu que t'avais fait un Tuto pour l'installation..

Hors ligne

 

#21 09-04-2014 15:05:44

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 un ORM donc ça apporte tout ce qu'apporte un ORM big_smile. C'est un peu plus lourd que Zend\Db mais tellement plus pratique. C'est toi qui voit, perso je le lâche plus :p.

Le tuto doit plus être à jour mais maintenant il y a une doc sur le ZF2 dans DoctrineORMModule et DoctrineModule donc c'est très simple. Mon tuto je m'en sers même plus et ça date d'il y a quasiment 2 ans quand même :p.

Hors ligne

 

#22 09-04-2014 15:48:37

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

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

Je pense pas utiliser Doctrine maintenant, peut être sur un prochain projet mais là j'ai déjà trop avancé avec Zend\DB hmm

Maintenant pour en revenir à mon problème, je pige pas pourquoi dans le cas d'album ça a marché, et avec mon appli ça ne marche pas, alors que j'ai exactement la même chose.

Controlleur de mon appli :

Code:

[lang=php]
public function gestionAction() {
        $formArray= array();
        $sites = $this->getSiteTable()->fetchAll();
        foreach ($sites as $site)
        {
            $form = new ListeForm();
            $form->bind($site);
            array_push($formArray,$form);
        }
        
        return new ViewModel (array(
                            'forms' => $formArray));       
    }

Controlleur d'album :

Code:

[lang=php]
    public function testAction()
    {
        $formArray= array();
        $albums = $this->getAlbumTable()->fetchAll();
        foreach ($albums as $album)
        {
            $form = new AlbumForm();
            $form->bind($album);
            
            array_push($formArray,$form);
        }
        
        return new ViewModel (array(
                            'forms' => $formArray));
    }

Dans la vue d'album j'ai bien mes 8 formulaires pré-remplis, dans celle de mon appli j'ai bien mes ~100 formulaires mais tous les champs sont vides. Le bind n'a pas du réussir mais pourquoi ? ><

Le fetchAll fait exactement la même chose dans les deux cas. T'as pas une idée de où peut venir la différence ? hmm

Dernière modification par astro785 (09-04-2014 15:50:11)

Hors ligne

 

#23 09-04-2014 16:04:06

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

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

Non je vois pas là ça vient de ta requête je pense. Ton objet Bâtiment a bien des getters et setters ?

Hors ligne

 

#24 09-04-2014 16:24:23

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

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

La seul requête que je fais c'est celle qui est dans fetchAll(), qui est la même pour les deux soit :

Code:

[lang=php]
    public function fetchAll() {
        return $this->select();
    }

Et vu que je me suis basé sur album, dans ce qui décrit mon batiment j'ai ça :

Code:

[lang=php]
<?php


namespace Liste\Model;

use Zend\InputFilter\Factory as InputFactory;
use Zend\InputFilter\InputFilter;
use Zend\InputFilter\InputFilterAwareInterface;
use Zend\InputFilter\InputFilterInterface;

class Liste {

    public $id;
    public $nom;
    public $adresse;
    public $cp;
    public $ville;
    public $surface;
    public $statut;
    public $placepk;
    public $obs;
    public $cdloc;
    public $cdcol;
    public $cadastre;
    public $vacant;
    public $estim;
    protected $inputFilter;

    public function exchangeArray($data) {
        $this->id = (isset($data['id'])) ? $data['id'] : null;
        $this->nom = (isset($data['nomsite'])) ? $data['nomsite'] : null;
        $this->adresse = (isset($data['adressesite'])) ? $data['adressesite'] : null;
        $this->cp = (isset($data['CPsite'])) ? $data['CPsite'] : null;
        $this->ville = (isset($data['villesite'])) ? $data['villesite'] : null;
        $this->surface = (isset($data['surfacesite'])) ? $data['surfacesite'] : null;
        $this->statut = (isset($data['statutsite'])) ? $data['statutsite'] : null;
        $this->placepk = (isset($data['placesparkingsite'])) ? $data['placesparkingsite'] : null;
        $this->obs = (isset($data['observationsite'])) ? $data['observationsite'] : null;
        $this->cdloc = (isset($data['codelocsite'])) ? $data['codelocsite'] : null;
        $this->cdcol = (isset($data['codecolsite'])) ? $data['codecolsite'] : null;
        $this->cadastre = (isset($data['cadastresite'])) ? $data['cadastresite'] : null;
        $this->vacant = (isset($data['vacantsite'])) ? $data['vacantsite'] : null;
        $this->estim = (isset($data['estimsite'])) ? $data['estimsite'] : null;
    }

    public function setInputFilter(InputFilterInterface $inputFilter) {
        throw new \Exception("Not used");
    }

    public function getInputFilter() {
        if (!$this->inputFilter) {
            $inputFilter = new InputFilter();
            $factory = new InputFactory();

            $inputFilter->add($factory->createInput(array('name' => 'id',
                        'required' => true,
                        'filters' => array(array('name' => 'Int')))));

            $inputFilter->add($factory->createInput(array('name' => 'nomsite',
                        'required' => true,
                        'filters' => array(array('name' => 'StripTags'),
                            array('name' => 'StringTrim')),
                        'validators' => array(array('name' => 'StringLength',
                                'options' => array('encoding' => 'UTF-8',
                                    'min' => 1,
                                    'max' => 100
                                    ))))));

            $inputFilter->add($factory->createInput(array('name' => 'CPsite',
                        'required' => true,
                        'filters' => array(array('name' => 'StripTags'),
                            array('name' => 'StringTrim')),
                        'validators' => array(array('name' => 'StringLength',
                                'options' => array('encoding' => 'UTF-8',
                                    'min' => 5,
                                    'max' => 5))))));

            $inputFilter->add($factory->createInput(array('name' => 'villesite',
                        'required' => true,
                        'filters' => array(array('name' => 'StripTags'),
                            array('name' => 'StringTrim')),
                        'validators' => array(array('name' => 'StringLength',
                                'options' => array('encoding' => 'UTF-8',
                                    'min' => 1,
                                    'max' => 100))))));

            $inputFilter->add($factory->createInput(array('name' => 'adressesite',
                        'required' => true,
                        'filters' => array(array('name' => 'StripTags'),
                            array('name' => 'StringTrim')),
                        'validators' => array(array('name' => 'StringLength',
                                'options' => array('encoding' => 'UTF-8',
                                    'min' => 1,
                                    'max' => 100))))));

            $inputFilter->add($factory->createInput(array('name' => 'surfacesite',
                        'required' => false,
                        'filters' => array(array('name' => 'StripTags'),
                            array('name' => 'StringTrim')),
                        'validators' => array(array('name' => 'StringLength',
                                'options' => array('encoding' => 'UTF-8',
                                    'min' => 1,
                                    'max' => 100))))));

            $inputFilter->add($factory->createInput(array('name' => 'statutsite',
                        'required' => true,
            )));

            $inputFilter->add($factory->createInput(array('name' => 'placesparkingsite',
                        'required' => false,
                        'filters' => array(array('name' => 'StripTags'),
                            array('name' => 'StringTrim')),
                        'validators' => array(array('name' => 'StringLength',
                                'options' => array('encoding' => 'UTF-8',
                                    'min' => 1,
                                    'max' => 100))))));

            $inputFilter->add($factory->createInput(array('name' => 'observationsite',
                        'required' => false,
                        'filters' => array(array('name' => 'StripTags'),
                            array('name' => 'StringTrim')),
                        'validators' => array(array('name' => 'StringLength',
                                'options' => array('encoding' => 'UTF-8',
                                    'min' => 1,
                                    'max' => 100))))));

            $inputFilter->add($factory->createInput(array('name' => 'codelocsite',
                        'required' => false,
                        'filters' => array(array('name' => 'StripTags'),
                            array('name' => 'StringTrim')),
                        'validators' => array(array('name' => 'StringLength',
                                'options' => array('encoding' => 'UTF-8',
                                    'min' => 1,
                                    'max' => 100))))));

            $inputFilter->add($factory->createInput(array('name' => 'codecolsite',
                        'required' => false,
                        'filters' => array(array('name' => 'StripTags'),
                            array('name' => 'StringTrim')),
                        'validators' => array(array('name' => 'StringLength',
                                'options' => array('encoding' => 'UTF-8',
                                    'min' => 1,
                                    'max' => 100))))));

            $inputFilter->add($factory->createInput(array('name' => 'cadastresite',
                        'required' => false,
                        'filters' => array(array('name' => 'StripTags'),
                            array('name' => 'StringTrim')),
                        'validators' => array(array('name' => 'StringLength',
                                'options' => array('encoding' => 'UTF-8',
                                    'min' => 1,
                                    'max' => 100))))));

            $inputFilter->add($factory->createInput(array('name' => 'vacantsite',
                        'required' => false,
            )));

            $inputFilter->add($factory->createInput(array('name' => 'estimsite',
                        'required' => false,
                        'filters' => array(array('name' => 'StripTags'),
                            array('name' => 'StringTrim')),
                        'validators' => array(array('name' => 'StringLength',
                                'options' => array('encoding' => 'UTF-8',
                                    'min' => 1,
                                    'max' => 100))))));


            $this->inputFilter = $inputFilter;
        }

        return $this->inputFilter;
    }

    // Add the following method:
    public function getArrayCopy() {
        return get_object_vars($this);
    }

}

Ils utilisent pas d'entity dans le tuto, si c'est ça dont tu parles, j'en ai fait une pour batiment mais je ne m'en sers pas.

Code:

[lang=php]
<?php

namespace Liste\Entity;

class Batiment {

    protected $id;
    protected $nom;
    protected $adresse;
    protected $cp;
    protected $ville;
    protected $surface;
    protected $statut;
    protected $placepk;
    protected $obs;
    protected $cdloc;
    protected $cdcol;
    protected $cadastre;
    protected $vacant;
    protected $estim;

    public function setNom($nom) {
        $this->nom = $nom;
        return $this;
    }

    public function setAdresse($ad) {
        $this->adresse = $ad;
        return $this;
    }

    public function setCP($cp) {
        $this->cp = $cp;
        return $this;
    }

    public function setVille($v) {
        $this->ville = $v;
        return $this;
    }

    public function setSurface($s) {
        $this->surface = $s;
        return $this;
    }

    public function setStatut($s) {
        $this->statut = $s;
        return $this;
    }

    public function setPlacesPK($pk) {
        $this->placepk = $pk;
        return $this;
    }

    public function setObs($obs) {
        $this->obs = $obs;
        return $this;
    }

    public function setCdLoc($loc) {
        $this->cdloc = $loc;
        return $this;
    }

    public function setCdCol($col) {
        $this->cdcol = $col;
        return $this;
    }

    public function setCadastre($cad) {
        $this->cadastre = $cad;
        return $this;
    }

    public function setVacant($vac) {
        $this->vacant = $vac;
        return $this;
    }

    public function setEstim($est) {
        $this->estim = $est;
        return $this;
    }
    
     public function getNom()
     {
         return $this->nom;
     }
     
          public function getAdresse()
     {
         return $this->adresse;
     }
     
          public function getCP()
     {
         return $this->cp;
     }
     
          public function getVille()
     {
         return $this->ville;
     }
     
          public function getSurface()
     {
         return $this->surface;
     }
     
          public function getStatut()
     {
         return $this->statut;
     }
     
          public function getPlacesPK()
     {
         return $this->placepk;
     }
     
          public function getObs()
     {
         return $this->obs;
     }
     
          public function getCdLoc()
     {
         return $this->cdloc;
     }
     
          public function getCdCol()
     {
         return $this->cdcol;
     }
     
          public function getCadastre()
     {
         return $this->cadastre;
     }
     
          public function getVacant()
     {
         return $this->vacant;
     }
     
               public function getEstim()
     {
         return $this->estim;
     }
     

}

Dernière modification par astro785 (09-04-2014 16:26:45)

Hors ligne

 

#25 10-04-2014 09:59:05

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

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

J'ai toujours rien trouvé, en revanche j'aimerai savoir comment marche le bind.

Code:

[lang=php]
$form->bind($album);

Comment puis-je voir le contenu de $album ? Et celui de $form une fois l'instruction passée ?
Comment bind "remplit"-il $form grâce aux données contenues dans $album ?

Merci smile

Dernière modification par astro785 (10-04-2014 09:59:28)

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