Im aktuellen Zustand habe ich zwei Module - Hauptmodul und Admin Panel Modul. Hauptmodul heißt "Kreator", admin -> "KreatorAdmin". Alle Modelle befinden sich im Kreator-Modul (Kreator/Model/UserTable.php etc.).ZF2 - geteilte Modelle zwischen den Modulen
"KreatorAdmin" ist fast leer, gibt es eine Konfiguration für sie ist:
KreatorAdmin/config/module.config.php
<?php
return array(
'controllers' => array(
'invokables' => array(
'KreatorAdmin\Controller\Admin' => 'KreatorAdmin\Controller\AdminController',
),
),
'router' => array(
'routes' => array(
'zfcadmin' => array(
'options' => array(
'defaults' => array(
'controller' => 'KreatorAdmin\Controller\Admin',
'action' => 'index',
),
),
),
),
),
'view_manager' => array(
'template_path_stack' => array(
__DIR__ . '/../view'
),
),
);
KreatorAdmin/src/KreatorAdmin/AdminController.php
<?php
namespace KreatorAdmin\Controller;
use Zend\Mvc\Controller\AbstractActionController;
use Zend\View\Model\ViewModel;
class AdminController extends AbstractActionController
{
public function indexAction()
{
//$this->getServiceLocator()->get('Kreator\Model\UserTable');
return new ViewModel();
}
}
KreatorAdmin/module.php
<?php
namespace KreatorAdmin;
class Module
{
public function getConfig()
{
return include __DIR__ . '/config/module.config.php';
}
public function getAutoloaderConfig()
{
return array(
'Zend\Loader\StandardAutoloader' => array(
'namespaces' => array(
__NAMESPACE__ => __DIR__ . '/src/' . __NAMESPACE__,
),
),
);
}
}
einfach "use" -Aussagen in Controller Hinzufügen und durch Namensräumen führt zu Fehler
Argument 1 bestanden KreatorAdmin \ Regler \ Admincontroller navigiert :: __ construct() muss eine Instanz von Kreator sein \ Modell \ Usertable, keine gegeben,
ich habe auch versucht, ein wenig mit Service-Managern zu spielen, wie hier beschrieben: ZF2 Models shared between Modules aber kein Glück so weit.
Wie soll ich von KreatorAdmin/src/KreatorAdmin/AdminController.php auf UserTable zugreifen?
Prost!
Update 1 I getServiceConfig hinzugefügt haben
public function getServiceConfig()
{
return [
'factories' => [
// 'Kreator\Model\UserTable' => function($sm) {
// $tableGateway = $sm->get('UserTableGateway');
// $table = new UserTable($tableGateway);
// return $table;
// },
// 'UserTableGateway' => function($sm) {
// $dbAdapter = $sm->get('Zend\Db\Adapter\Adapter');
// $resultSetPrototype = new ResultSet();
// $resultSetPrototype->setArrayObjectPrototype(new User());
// return new TableGateway('user', $dbAdapter, null, $resultSetPrototype);
// },
'DbAdapter' => function (ServiceManager $sm) {
$config = $sm->get('Config');
return new Adapter($config['db']);
},
'UserTable' => function (ServiceManager $sm) {
return new UserTable($sm->get('UserTableGateway'));
},
'UserTableGateway' => function (ServiceManager $sm) {
$dbAdapter = $sm->get('DbAdapter');
$resultSetPrototype = new ResultSet();
$resultSetPrototype->setArrayObjectPrototype(new User());
return new TableGateway('users', $dbAdapter, null, $resultSetPrototype);
},
],
];
}
und aktualisiert Controller
class AdminController extends AbstractActionController
{
protected $userTable;
public function indexAction()
{
$userTable = $this->getServiceLocator()->get('Kreator\Model\UserTable');
return new ViewModel();
}
}
Erster Fehler module.php - kommentierte Version mit:
Zend \ ServiceManager \ Exception \ ServiceNotFoundException: Z Ende \ Servicemanager \ Servicemanager :: get konnte nicht eine Instanz für Zend \ Db \ Adapter \ Adapter
Zweite holen oder erstellen - mit uncommented Teil:
Zend \ Servicemanager \ Exception \ ServiceNotFoundException: Zend \ Servicemanager \ Servicemanager :: get konnte nicht eine Instanz für Kreator \ Modell \ Usertable
Lösung
holen oder erstellenWenn sich jemand wundert. Mit der obigen Konfiguration gibt es eine korrekte Lösung in Jobaer Antwort. kommentierte Version verwenden, müssen Sie
'Zend\Db\Adapter\Adapter' => 'Zend\Db\Adapter\AdapterServiceFactory',
irgendwo in config service_manager hinzuzufügen erinnern.
Hallo, danke für eine Antwort. Ich habe die Frage mit vollem Code aktualisiert. Immer noch kann es nicht zur Arbeit tho. Irgendwelche Ideen? Ja, es gibt Verwendungshinweise. – ficus
Habe gerade meine Antwort aktualisiert. Verwenden Sie '$ this-> getServiceLocator() -> get ('UserTable')' anstelle von '$ this-> getServiceLocator() -> get ('Kreator \ Model \ UserTable')' wenn Sie mit ** gehen möchten unkommentierte ** Konfiguration Lass es mich wissen, wenn das funktioniert. – unclexo
Ja, ich habe es in beide Richtungen arbeiten lassen. Vielen Dank! – ficus