Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 14-01-2017 15:16:28

Alinido
Nouveau membre
Date d'inscription: 14-01-2017
Messages: 5

problème pour accéder à mes models

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 smile 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

Code:

[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:

Code:

[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 :

Code:

[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;
    }
}

Code:

[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

 

#2 14-01-2017 15:42:06

JGreco
Modérateur
Date d'inscription: 22-12-2012
Messages: 417

Re: problème pour accéder à mes models

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


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

Hors ligne

 

#3 14-01-2017 16:08:07

Alinido
Nouveau membre
Date d'inscription: 14-01-2017
Messages: 5

Re: problème pour accéder à mes models

merci pour la réponse smile

je me suis trompé de IndexController.php c'est celui ci que j'utilise :

Code:

[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

 

#4 14-01-2017 18:00:14

Alinido
Nouveau membre
Date d'inscription: 14-01-2017
Messages: 5

Re: problème pour accéder à mes models

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 smile

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