2015-12-07 32 views
5

Ben Zend Framework 2'yi kullanarak bir sistem geliştiriyorum fabrikaya tarafından kapanışları yerine ve anahtar config_cache_enabledapplication.config.php yılında kapanışları bir hata aldı çevirmek Module.php'daki kapanmaları kullanması önerilir çünkü yapılandırma önbelleğinde bu hatanın neden olduğu durum buydu, bunu düşünerek kapakların fabrika tarafından değiştirilmesini öneren bazı yayınları okudum.Zend Framework 2 Module.php

Yaptığım şey, bir fabrika oluşturdum ve Module.php'daki TableGateway'deki DI'nin yerini bir Fabrika tarafından değiştirdi ve mükemmel bir şekilde çalıştı, sorum şu ki, yaptığım gibi bir şey olup olmadığını bilmiyorum.

Sorunu çözmenin doğru yolu olup olmadığını bana söyleyebilir misiniz?

application.config.php - önce:

'Admin\Model\PedidosTable' => function($sm) { 
    $tableGateway = $sm->get('PedidosTableGateway'); 
    $table = new PedidosTable($tableGateway); 
    return $table; 
}, 
'PedidosTableGateway' => function($sm) { 
    $dbAdapter = $sm->get('Zend\Db\Adapter\Adapter'); 
    $resultSetPrototype = new ResultSet(); 
    $resultSetPrototype->setArrayObjectPrototype(new Pedidos()); 
    return new TableGateway('pedidos', $dbAdapter, null, $resultSetPrototype); 
}, 

application.config.php - sonra:

'factories' => array(
    'PedidosTable' => 'Admin\Service\PedidosTableFactory', 
), 
'aliases' => array(
    'Admin\Model\PedidosTable' => 'PedidosTable', 
), 

TableFactory:

namespace Admin\Service; 

use Zend\ServiceManager\FactoryInterface; 
use Zend\ServiceManager\ServiceLocatorInterface; 

use Zend\Db\ResultSet\ResultSet; 
use Zend\Db\TableGateway\TableGateway; 

use Admin\Model\Pedidos; 
use Admin\Model\PedidosTable; 

class PedidosTableFactory implements FactoryInterface 
{ 
    public function createService(ServiceLocatorInterface $serviceLocator) 
    { 
     $dbAdapter = $serviceLocator->get('Zend\Db\Adapter\Adapter'); 

     $resultSetPrototype = new ResultSet(); 
     $resultSetPrototype->setArrayObjectPrototype(new Pedidos()); 

     $tableGateway = new TableGateway('pedidos', $dbAdapter, null, $resultSetPrototype); 
     $table = new PedidosTable($tableGateway); 

     return $table; 
    } 
} 
+1

Bu onay doğru, evet. Ancak, sihirli yöntem __invoke usung için geçiş yapmanızı tavsiye ederiz. Daha sonra bir kod örneği gönderirim. – Stanimir

+0

Evet, sorun yok. – tasmaniski

cevap

İlgili konular