ZF2 - get a été impossible de récupérer ou créer une instance pour getAlbumTable

J'ai utilisé le getAlbumTable dans le titre, puisque le problème que je me pose est basée sur le Zend Album Tutoriel, peut-être plus facile pour les autres qui ont un problème similaire à trouver. Tout ce que j'ai fait est de renommer l'Album "Champrallies".

Mon erreur:

Zend\Mvc\Controller\PluginManager::get was unable to fetch or create an instance for getChampralliesTable

Ce que j'essaie de faire est d'exécuter une fonction à partir d'un deuxième Modèle que j'ai créé. J'pouvez exécuter à partir de l'original modèle pas de problème AlbumTable ou dans mon cas ChampionshipTable. Je vais essayer d'obtenir des données à partir d'une deuxième table, mais dans le même module. Le deuxième tableau est appelé "champ_rallies" et les fichiers de Modèle Champrallies.php et ChampralliesTable.php.

La modification de cette partie dans mon contrôleur

'champRallies' => $this->getChampralliesTable()->fetchAll(),

à

'champRallies' => $this->getChampionshipTable()->fetchAll(),

signifie le message d'erreur disparaît. Donc, ma première pensée est qu'il ya quelque chose de mal avec les espaces de noms, ou module.php. (Pardonnez-moi, je suis assez nouveau à tout cela)

Module.php

<?php
namespace Championship;

use Championship\Model\Championship;
use Championship\Model\ChampionshipTable;
use Championship\Model\Champrallies;
use Championship\Model\ChampralliesTable;
use Zend\Db\ResultSet\ResultSet;
use Zend\Db\TableGateway\TableGateway;

class Module
{
    public function getAutoloaderConfig()
    {
        return array(
            'Zend\Loader\ClassMapAutoloader' => array(
                __DIR__ . '/autoload_classmap.php',
            ),
            'Zend\Loader\StandardAutoloader' => array(
                'namespaces' => array(
                    __NAMESPACE__ => __DIR__ . '/src/' . __NAMESPACE__,
                ),
            ),
        );
    }

    public function getConfig()
    {
        return include __DIR__ . '/config/module.config.php';
    }

    //Add this method:
    public function getServiceConfig()
    {
        return array(
            'factories' => array(
                'Championship\Model\ChampionshipTable' =>  function($sm) {
                    $tableGateway = $sm->get('ChampionshipTableGateway');
                    $table = new ChampionshipTable($tableGateway);
                    return $table;
                },
                'ChampionshipTableGateway' => function ($sm) {
                    $dbAdapter = $sm->get('Zend\Db\Adapter\Adapter');
                    $resultSetPrototype = new ResultSet();
                    $resultSetPrototype->setArrayObjectPrototype(new Championship());
                    return new TableGateway('championships', $dbAdapter, null, $resultSetPrototype);
                },
                'Championship\Model\ChampralliesTable' =>  function($sm) {
                    $tableGateway = $sm->get('ChampralliesTableGateway');
                    $table = new ChampralliesTable($tableGateway);
                    return $table;
                },
                'ChampralliesTableGateway' => function ($sm) {
                    $dbAdapter = $sm->get('Zend\Db\Adapter\Adapter');
                    $resultSetPrototype = new ResultSet();
                    $resultSetPrototype->setArrayObjectPrototype(new Champrallies());
                    return new TableGateway('champ_rallies', $dbAdapter, null, $resultSetPrototype);
                },
            ),
        );
    }
}

Ma deuxième pensée est que peut-être je ne suis pas déclarer le droit de l'espace de noms, ou quelque chose de similaire.

ChampralliesTable.php

<?php

namespace Championship\Model;

use Zend\Db\TableGateway\TableGateway;

class ChampralliesTable

Champrallies.php

<?php

namespace Championship\Model;

class Champrallies

J'ai peur, je suis surplombant quelque chose d'échec, mais je n'ai trouvé aucun des postes similaires par le biais de google ou ici, toute aide est très appréciée!

edit: j'avais oublié d'ajouter getChampralliesTable fonction de la manette elle-même,

public function getChampralliesTable()
{
This is Line 50 -> if (!$this->champralliesTable) {
        $sm = $this->getServiceLocator();
        $this->champralliesTable = $sm->get('Championship\Model\ChampralliesTable');
    }
    return $this->champralliesTable;
}

Mais maintenant je suis de ce,

Notice: Undefined property: Championship\Controller\ChampionshipController::$champralliesTable in /usr/home/phil/git/rallystats/module/Championship/src/Championship/Controller/ChampionshipController.php on line 50
Il suffit d'ajouter la propriété à votre contrôleur: protected $champralliesTable

OriginalL'auteur Jack | 2013-08-15