Я использовал 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
Просто добавьте свойство вашему контроллеру: защищенные $ champralliesTable –