2013-08-15 3 views
3

Я использовал getAlbumTable в названии, так как проблема, с которой я столкнулась, основана на учебнике по альбому Zend, может быть проще для других, имеющих аналогичную проблему. Все, что я сделал, это переименовать альбом в «Champrallies».ZF2 - get не удалось получить или создать экземпляр для getAlbumTable

Моя ошибка:

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

То, что я пытаюсь сделать, это выполнить функцию из второй модели я создал. Я могу выполнить из «оригинальной» модели без проблем AlbumTable или в моем случае ChampionshipTable. Я пытаюсь получить данные из второй таблицы, но в том же модуле. Вторая таблица называется «champ_rallies», а файлы Model - Champrallies.php и ChampralliesTable.php.

Изменение этой части в мой контроллер

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

в

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

означает сообщение об ошибке исчезает. Поэтому моя первая мысль заключается в том, что что-то не так с пространствами имен, или module.php. (Прости меня, я довольно новый на все это)

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); 
       }, 
      ), 
     ); 
    } 
} 

Моя вторая мысль, что, возможно, я не заявляющего правильное пространство имен, или что-то подобное.

ChampralliesTable.php

<?php 

namespace Championship\Model; 

use Zend\Db\TableGateway\TableGateway; 

class ChampralliesTable 

Champrallies.php

<?php 

namespace Championship\Model; 

class Champrallies 

Я боюсь, что я с видом что-то ошибку, но я не нашел никаких подобных сообщений через Google или на здесь, любая помощь оценили!

редактировать: я забыл добавить getChampralliesTable функцию в самом контроллере,

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

Но теперь я получаю это,

Notice: Undefined property: Championship\Controller\ChampionshipController::$champralliesTable in /usr/home/phil/git/rallystats/module/Championship/src/Championship/Controller/ChampionshipController.php on line 50 
+1

Просто добавьте свойство вашему контроллеру: защищенные $ champralliesTable –

ответ

3

Я забыл добавить getChampralliesTable функцию к контроллеру само по себе,

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

Но теперь я получаю это,

Notice: Undefined property: Championship\Controller\ChampionshipController::$champralliesTable in /usr/home/phil/git/rallystats/module/Championship/src/Championship/Controller/ChampionshipController.php on line 50 

Решая это был просто вопрос добавления

protected $champralliesTable; 

к верхней части моего ChampionshipController.

Редактировать: Выполнение вышеуказанного решает мою проблему.

Смежные вопросы