Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
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
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
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
et bien tu a juste a récupérer les utilisateur avec ton modèle comme tu le ferai pour tes cartesim.
[lang=php] $users = new User(); $all_user = $users->getAll(); ...
si tu met tes namespace correctement tu n'aura pas de soucis
Hors ligne
ouii j'ai fait presque la même chose : avec un nouveau controlleur appelé Gsm avec le même principe
$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
tu peu me montrer ta class usertable?
Hors ligne
oui avec plaisir
<?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
Bonjour,
quand tu fait
[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.
Hors ligne
oui j'ai bien compris Mr JGreco
$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
$this->add(array( 'name' => 'affect', 'type' => 'Zend\Form\Element\Select', 'options' => array( 'label' => 'Affecte a', ), ));
Hors ligne
En réalité
[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.
Hors ligne
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
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
salut Orkin
$form = new GsmForm();
Hors ligne
Normalement en faisant ce que je t'ai dit ça devrait fonctionner
Hors ligne