私はZF2でいくつかのプロジェクトの後にZF3を設定しようとしていますが、別のモジュールにあるモデルにアクセスすることはできません。他のモジュールからのモデルへのアクセスzf3
私は、データベース内の3つのテーブルがあり、その後、私のアプリケーション\ SRC \ Module.php
public function getServiceConfig()
{
return [
'factories' => [
Model\ChatTable::class => function($container) {
$tableGateway = $container->get(Model\ChatTableGateway::class);
return new Model\ChatTable($tableGateway);
},
Model\ChatTableGateway::class => function ($container) {
$dbAdapter = $container->get(AdapterInterface::class);
$resultSetPrototype = new ResultSet();
$resultSetPrototype->setArrayObjectPrototype(new Model\Chat());
return new TableGateway('chat', $dbAdapter, null, $resultSetPrototype);
},
Model\OperadorTable::class => function($container) {
$tableGateway = $container->get(Model\OperadorTableGateway::class);
return new Model\OperadorTable($tableGateway);
},
Model\OperadorTableGateway::class => function ($container) {
$dbAdapter = $container->get(AdapterInterface::class);
$resultSetPrototype = new ResultSet();
$resultSetPrototype->setArrayObjectPrototype(new Model\Operador());
return new TableGateway('operador', $dbAdapter, null, $resultSetPrototype);
},
Model\ConversacionTable::class => function($container) {
$tableGateway = $container->get(Model\ConversacionTableGateway::class);
return new Model\ConversacionTable($tableGateway);
},
Model\ConversacionTableGateway::class => function ($container) {
$dbAdapter = $container->get(AdapterInterface::class);
$resultSetPrototype = new ResultSet();
$resultSetPrototype->setArrayObjectPrototype(new Model\Conversacion());
return new TableGateway('conversacion', $dbAdapter, null, $resultSetPrototype);
},
],
];
}
public function getControllerConfig()
{
return [
'factories' => [
Controller\IndexController::class => function($container) {
return new Controller\IndexController(
$container->get(Model\ChatTable::class),
$container->get(Model\OperadorTable::class),
$container->get(Model\ConversacionTable::class)
);
},
],
];
}
に従うように私は、ゲートウェイを定義し、私は次のように\私のアプリケーションでのコントローラ\ IndexControllerそれらを使用することができます:
namespace Application\Controller;
use Application\Model\ChatTable;
use Application\Model\OperadorTable;
use Application\Model\ConversacionTable;
use Zend\Mvc\Controller\AbstractActionController;
use Zend\View\Model\ViewModel;
class IndexController extends AbstractActionController
{
private $chatTable;
private $operadorTable;
private $conversacionTable;
//TABLAS
public function __construct(
ChatTable $chatTable,
OperadorTable $operadorTable,
ConversacionTable $conversacionTable
){
$this->chatTable = $chatTable;
$this->operadorTable = $operadorTable;
$this->conversacionTable = $conversacionTable;
}
//VIEW ACTIONS
public function indexAction()
{
return new ViewModel([
'chats' => $this->chatTable->fetchAll(),
'operadores' => $this->operadorTable->fetchAll(),
'conversaciones' => $this->conversacionTable->fetchAll(),
]);
}
}
これは完全に機能します。私の質問は、例えば、Chat&ChatTableモデルをPanel \ Model \ ChatTableのような別のモジュールに入れて、アプリケーションモジュールからアクセスする方が好きなのですか?私は何を変えるべきですか?
ZF2では、これはService Locatorを使用すると簡単でした。私はサービスファクトリの使用を提案する質問を見つけましたが、少なくとも私の場合は、モジュール内とモジュール外から同時にモデルを使用するというアイデアは解決しません。
ありがとうございます。さようなら!