Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Bonjour,
je suis totalement débutante dans zend (1 semaine) après avoir suivi les différents tuto trouvé sur le net je me lance pour pour faire une simple avec controler etc ... c'est un succès youpi niveau 2 me créer une base avec une simple table et j'aimerais afficher son contenu sur ma page là je bloque après plusieurs heures à tout recommencer je me décide à demander de l'aide ...
donc déjà mon erreur "An error occurred An error occurred during execution; please try again later. No Exception available"
Mon module s'appel : Pizza
contenu de module.php
[lang=php]<?php namespace Pizza; use Zend\Mvc\ModuleRouteListener; use Zend\Mvc\MvcEvent; class Module { public function onBootstrap(MvcEvent $e) { $eventManager = $e->getApplication()->getEventManager(); $moduleRouteListener = new ModuleRouteListener(); $moduleRouteListener->attach($eventManager); } public function getConfig() { return include __DIR__ . '/config/module.config.php'; } public function getServiceConfiguration() { return array( 'factories' => array( 'db-adapter' => function($sm) { $config = $sm->get('config'); $config = $config['db']; $dbAdapter = new DbAdapter($config); return $dbAdapter; }, ), ); } public function getServiceConfig() { return array( 'factories' => array( 'Pizza\Model\ListepizzaTable' => function($sm) { $tableGateway = $sm->get('ListepizzaTableGateway'); $table = new ListepizzaTable($tableGateway); return $table; }, 'ListepizzaTableGateway' => function ($sm) { $dbAdapter = $sm->get('Zend\Db\Adapter\Adapter'); $resultSetPrototype = new ResultSet(); $resultSetPrototype->setArrayObjectPrototype(new Listepizza()); return new TableGateway('tb_pizza_patron', $dbAdapter, null, $resultSetPrototype); } ), ); } public function getAutoloaderConfig() { return array( 'Zend\Loader\StandardAutoloader' => array( 'namespaces' => array( __NAMESPACE__ => __DIR__ . '/src/' . __NAMESPACE__, ), ), ); } }
Mon IndexController.php:
[lang=php]<?php namespace Pizza\Controller; use Zend\Mvc\Controller\AbstractActionController; use Zend\View\Model\ViewModel; use Pizza\Model\Pizza; class IndexController extends AbstractActionController { protected $listepizzaTable; public function indexAction() { return new ViewModel(array( 'pizzas' => $this->listepizzaTable->fetchAll(), )); $this->layout('layout/layout'); } public function getPizzaTable() { if (!$this->listepizzaTable) { $sm = $this->getServiceLocator(); $this->listepizzaTable = $sm->get('Pizza\Model\ListepizzaTable'); } return $this->listepizzaTable; } }
Mes model :
[lang=php]<?php namespace Pizza\Model; class Listepizza { public $id; public $nom; public function exchangeArray($data) { $this->id = (isset($data['id'])) ? $data['id'] : null; $this->nom = (isset($data['nom'])) ? $data['nom'] : null; } }
[lang=php]<?php namespace Pizza\Model; use Zend\Db\TableGateway\TableGateway; class ListepizzaTable { protected $tableGateway; public function __construct(TableGateway $tableGateway) { $this->tableGateway = $tableGateway; } public function fetchAll() { $resultSet = $this->tableGateway->select(); return $resultSet; } }
dés que j'enlève l'appel à la fonction "'pizzas' => $this->listepizzaTable->fetchAll()," dans mon controler la vue revient plus d'erreur mais bon forcément j'ai pas accès à ma requête ... cela doit être une erreur vraiment de débutante je pense il doit manquer un truc mais je ne vois pas, si quelqu'un à une idée ?
merci
Hors ligne
Bonjour,
Le problème se trouve dans ton contrôleur, tu appel directement ton objet que tu veux être ton table gateway, mais je ne vois ni constructeur qui instancie ni dépendance a cet objet... En gros tu lui demande un objet que tu lui as jamais donné. Ton contrôleur ne sais donc pas ou trouver ton ListePizzaTable
Hors ligne
merci pour la réponse
je me suis trompé de IndexController.php c'est celui ci que j'utilise :
[lang=php]<?php namespace Pizza\Controller; use Zend\Mvc\Controller\AbstractActionController; use Zend\View\Model\ViewModel; use Pizza\Model\Pizza; class IndexController extends AbstractActionController { protected $listepizzaTable; public function indexAction() { getPizzaTable(); return new ViewModel(array( 'pizzas' => $this->getPizzaTable()->fetchAll(), )); $this->layout('layout/layout'); } public function getPizzaTable() { if (!$this->listepizzaTable) { $sm = $this->getServiceLocator(); $this->listepizzaTable = $sm->get('Pizza\Model\ListepizzaTable'); } return $this->listepizzaTable; } }
dans ma tête ça ce passait comme ça :
- Le model ListepizzaTable créé l'objet TableGateway ainsi que les diverses requêtes dont on aura besoin
- Le IndexController appel cet objet via getPizzaTable pour le mettre dans listepizzaTable, via la fonction indexAction mon index récupère tout ça via "'pizzas' => $this->getPizzaTable()->fetchAll()," pour le transmettre à la vue
donc la construction se passe dans le model ListepizzaTable je me suis servi du tuto album pour essayer de créer tout ça mais j'ai dû sauter une étape ...
Dernière modification par Alinido (14-01-2017 16:08:39)
Hors ligne
C'est bon j'ai trouvé j'avais oublié de charger ça dans mon module :
use Pizza\Model\Listepizza;
use Pizza\Model\ListepizzaTable;
use Zend\Db\ResultSet\ResultSet;
je continue mes aventures merci
Hors ligne