Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

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

yassinho2015
Nouveau membre
Date d'inscription: 19-04-2014
Messages: 9

Zf2 remplir select à partir d'une autre table

Bonjour,

j'ai deux controlleurs (user et cartesim) dans le même module 'Application', je veux récupérer les utilisateurs dans un champ select dans le formulaire des cartesim afin de faciliter l'affectation d'une carte sim à un utilisateur choisi via la combobox.

Y-a-t il un tuto qui me montre ça ?

Merci d'avance.

NB: je travaille avec Zend Framework 2.2 (MVC) /MySql

Hors ligne

 

#2 22-04-2014 11:12:43

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

Re: Zf2 remplir select à partir d'une autre table

Je ne vois pas pourquoi le fais que tu ai deux controllers différents soit un problème.
Tes modèles sont bien dans le même module non?

Hors ligne

 

#3 22-04-2014 11:28:57

yassinho2015
Nouveau membre
Date d'inscription: 19-04-2014
Messages: 9

Re: Zf2 remplir select à partir d'une autre table

oui flobrflo c Exactement ça j'ai mis le tout en un seule module

Dernière modification par yassinho2015 (22-04-2014 11:29:25)

Hors ligne

 

#4 22-04-2014 11:43:48

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

Re: Zf2 remplir select à partir d'une autre table

et bien tu a juste a récupérer les utilisateur avec ton modèle comme tu le ferai pour tes cartesim.

Code:

[lang=php]
$users = new User();
$all_user = $users->getAll();
...

si tu met tes namespace correctement tu n'aura pas de soucis smile

Hors ligne

 

#5 22-04-2014 12:05:51

yassinho2015
Nouveau membre
Date d'inscription: 19-04-2014
Messages: 9

Re: Zf2 remplir select à partir d'une autre table

ouii j'ai fait presque la même chose : avec un nouveau controlleur appelé Gsm avec le même principe

Code:

        $userDb=new UsersTable();
        $userRow=$userDb->fetchAll();
        $usertab = array();
        foreach ($userRow as $mod) {
            $usertab[$mod['idUtilisateur']] = $mod['nom'];
        }
        $form->affect->addMultiOptions($usertab);

mais ça se termine par une erreur :
Catchable fatal error: Argument 1 passed to Application\Model\UsersTable::__construct() must be an instance of Zend\Db\TableGateway\TableGateway, none given, called in C:\wamp\www\...\module\Application\src\Application\Controller\GsmController.php on line 42 and defined in C:\wamp\www\...\module\Application\src\Application\Model\UsersTable.php on line 10

Hors ligne

 

#6 22-04-2014 14:10:22

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

Re: Zf2 remplir select à partir d'une autre table

tu peu me montrer ta class usertable?

Hors ligne

 

#7 22-04-2014 15:23:11

yassinho2015
Nouveau membre
Date d'inscription: 19-04-2014
Messages: 9

Re: Zf2 remplir select à partir d'une autre table

oui  avec plaisir

Code:

<?php
namespace Application\Model;

use Zend\Db\TableGateway\TableGateway;

class UsersTable
{
    protected $tableGateway;

    public function __construct(TableGateway $tableGateway)
    {
        $this->tableGateway = $tableGateway;
    }
    
    public function fetchAll()
    {
        $resultSet = $this->tableGateway->select();
        return $resultSet;
    }

    public function getUser($idUtilisateur)
    {
        $idUtilisateur  = (int) $idUtilisateur;
        $rowset = $this->tableGateway->select(array('idUtilisateur' => $idUtilisateur));
        $row = $rowset->current();
        if (!$row) {
            throw new \Exception("Could not find row id");
        }
        return $row;
    }

    public function getUserByEmail($loginEmail)
    {
        $rowset = $this->tableGateway->select(array('loginEmail' => $loginEmail));
        $row = $rowset->current();
        if (!$row) {
            throw new \Exception("Could not find row $loginEmail");
        }
        return $row;
    }

    public function changePassword($idUtilisateur, $password)
    {
        $data['loginPass'] = $password;
        $this->tableGateway->update($data, array('idUtilisateur' => (int)$idUtilisateur));
    }
    
    public function saveUser(Auth $auth)
    {
        // for Zend\Db\TableGateway\TableGateway we need the data in array not object
        $data = array(
            'nom'                 => $auth->nom,
            'prenom'              => $auth->prenom,
            'loginEmail'          => $auth->loginEmail,
            'loginPass'          => $auth->loginPass,
            'confirmPassword'      => $auth->confirmPassword,
            'grade'              => $auth->grade,
            'service'              => $auth->service,
            'societe'              => $auth->societe,
            'site'              => $auth->site,
            //'usr_password_salt' => $auth->usr_password_salt,
            'email'             => $auth->email,
            'numTel'            => $auth->numTel,
            'etatCompte'        => $auth->etatCompte,
            'abonnementSim'        => $auth->abonnementSim,
            'idportable'        => $auth->idportable,
        );
        // If there is a method getArrayCopy() defined in Auth you can simply call it.
        // $data = $auth->getArrayCopy();

        $idUtilisateur = (int)$auth->idUtilisateur;
        if ($idUtilisateur == 0) {
            $this->tableGateway->insert($data);
        } else {
            if ($this->getUser($idUtilisateur)) {
                $this->tableGateway->update($data, array('idUtilisateur' => $idUtilisateur));
            } else {
                throw new \Exception('Form id does not exist');
            }
        }
    }
    
    public function deleteUser($idUtilisateur)
    {
        $this->tableGateway->delete(array('idUtilisateur' => $idUtilisateur));
    }    
}

Hors ligne

 

#8 22-04-2014 15:26:30

JGreco
Administrateur
Date d'inscription: 22-12-2012
Messages: 432

Re: Zf2 remplir select à partir d'une autre table

Bonjour,

quand tu fait

Code:

[lang=php]
$userDb=new UsersTable();

Tu ne lui passe aucun paramètre et il as besoin d'avoir une instance de tableGateway probablement celle qui lui dit que c'est une table User.
L'erreur te donne la réponse en fait.


ZF2 et doctrine addict
profil stack overflow : http://stackoverflow.com/users/3333246/ … ab=profile

Hors ligne

 

#9 22-04-2014 15:57:53

yassinho2015
Nouveau membre
Date d'inscription: 19-04-2014
Messages: 9

Re: Zf2 remplir select à partir d'une autre table

oui j'ai bien compris Mr JGreco

Code:

 $tableGateway=new TableGateway('utilisateur',$this->getServiceLocator()->get('Zend\Db\Adapter\Adapter'));
        $userDb=new UsersTable($tableGateway);
        $userRow=$userDb->fetchAll();
        $usertab = array();
        foreach ($userRow as $mod) {
            $usertab[$mod['idUtilisateur']] = $mod['nom'];
        }
        $form->affect->addMultiOptions($usertab);

et voilà deux nouvelles erreurs :
Notice: Undefined property: Application\Form\GsmForm::$affect in C:\wamp\www\...\module\Application\src\Application\Controller\GsmController.php on line 49
et
Fatal error: Call to a member function addMultiOptions() on a non-object in C:\wamp\www\...\module\Application\src\Application\Controller\GsmController.php on line 49 Call Stack


La déclaration de 'affect' en GsmForm.php

Code:

        $this->add(array(
                'name' => 'affect',
                'type' => 'Zend\Form\Element\Select',
                'options' => array(
                        'label' => 'Affecte a',
                ),
        ));

Hors ligne

 

#10 22-04-2014 16:56:06

JGreco
Administrateur
Date d'inscription: 22-12-2012
Messages: 432

Re: Zf2 remplir select à partir d'une autre table

En réalité

Code:

[lang=php]
$form->affect //...;

affect n'est pas reconnu car ce n'est pas une propriété de GSMForm, en tant qu'input elle existe on es d'accord mais pour l'utiliser de cette manière tu dois procéder autrement.


ZF2 et doctrine addict
profil stack overflow : http://stackoverflow.com/users/3333246/ … ab=profile

Hors ligne

 

#11 22-04-2014 17:08:56

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

Re: Zf2 remplir select à partir d'une autre table

Si tu veux utiliser les tableGateway tu va devoir passer par les factories.

la t'a quelques exemples:
http://framework.zend.com/manual/2.0/en … odels.html

Hors ligne

 

#12 22-04-2014 23:33:57

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

Re: Zf2 remplir select à partir d'une autre table

Salut, elle sort d'où ta variable $form ?

Dans tous les cas pour récupérer l'élément d'un formulaire c'est $monForm->get('nom-element');

Hors ligne

 

#13 23-04-2014 00:56:38

yassinho2015
Nouveau membre
Date d'inscription: 19-04-2014
Messages: 9

Re: Zf2 remplir select à partir d'une autre table

salut Orkin

Code:

 
$form = new GsmForm();

Hors ligne

 

#14 23-04-2014 09:32:28

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

Re: Zf2 remplir select à partir d'une autre table

Normalement en faisant ce que je t'ai dit ça devrait fonctionner 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