Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ionic-framework/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Zend\Db\TableGateway-我的配置在database.local.php Zend Framework 2中_Php_Zend Framework_Zend Framework2 - Fatal编程技术网

Zend\Db\TableGateway-我的配置在database.local.php Zend Framework 2中

Zend\Db\TableGateway-我的配置在database.local.php Zend Framework 2中,php,zend-framework,zend-framework2,Php,Zend Framework,Zend Framework2,我在Module.php中有以下方法 public function getServiceConfig() { return array( 'factories' => array( 'Application\Model\VehiclesTable' => function($sm) { $tableGateway = $sm->get('VehiclesTableGateway');

我在Module.php中有以下方法

 public function getServiceConfig()
 {
     return array(
         'factories' => array(
             'Application\Model\VehiclesTable' =>  function($sm) {
                 $tableGateway = $sm->get('VehiclesTableGateway');
                 $table = new VehiclesTable($tableGateway);
                 return $table;
             },
             'ApplicationTableGateway' => function ($sm) {
                 $dbAdapter = $sm->get('Zend\Db\Adapter\Adapter');
                 $resultSetPrototype = new ResultSet();
                 $resultSetPrototype->setArrayObjectPrototype(new Vehicles());
                 return new TableGateway('vehicles', $dbAdapter, null, $resultSetPrototype);
             },
         ),
     );
 }
但我得到了这个错误:

Zend\ServiceManager\ServiceManager::get was unable to fetch or create an instance for VehiclesTableGateway
我的
config/autoload/database.local.php
文件如下所示:

$dbParams = array(
    'database'  => 'zf-skeleton',
    'username'  => 'root',
    'password'  => 'root',
    'hostname'  => 'localhost',
    // buffer_results - only for mysqli buffered queries, skip for others
    'options' => array('buffer_results' => true)
);

return array(
    'service_manager' => array(
        'factories' => array(
            'Zend\Db\Adapter\Adapter' => function ($sm) use ($dbParams) {
                $adapter = new BjyProfiler\Db\Adapter\ProfilingAdapter(array(
                    'driver'    => 'pdo',
                    'dsn'       => 'mysql:dbname='.$dbParams['database'].';host='.$dbParams['hostname'],
                    'database'  => $dbParams['database'],
                    'username'  => $dbParams['username'],
                    'password'  => $dbParams['password'],
                    'hostname'  => $dbParams['hostname'],
                ));

                if (php_sapi_name() == 'cli') {
                    $logger = new Zend\Log\Logger();
                    // write queries profiling info to stdout in CLI mode
                    $writer = new Zend\Log\Writer\Stream('php://output');
                    $logger->addWriter($writer, Zend\Log\Logger::DEBUG);
                    $adapter->setProfiler(new BjyProfiler\Db\Profiler\LoggingProfiler($logger));
                } else {
                    $adapter->setProfiler(new BjyProfiler\Db\Profiler\Profiler());
                }
                if (isset($dbParams['options']) && is_array($dbParams['options'])) {
                    $options = $dbParams['options'];
                } else {
                    $options = array();
                }
                $adapter->injectProfilingStatementPrototype($options);
                return $adapter;
            },
        ),
    ),
);
我想保留我的
database.local.php
文件,但仍然能够为我的模块创建一个表网关,因此我认为我不需要:

     'factories' => array(
         'Application\Model\VehiclesTable' =>  function($sm) {
             $tableGateway = $sm->get('VehiclesTableGateway');
             $table = new VehiclesTable($tableGateway);
             return $table;
         },

有人能给我指出正确的方向吗?

在显示的配置文件中没有
'VehiclesTableGateway'

2个解决方案

如果要引用
'ApplicationTableGateway'
,请仅将
'VehiclestTableGateway'
的引用更改为
'ApplicationTableGateway'

如果需要特定的tableGateway,则应如下更新配置:

public function getServiceConfig()
 {
     return array(
         'factories' => array(
             'Application\Model\VehiclesTable' =>  function($sm) {
                 $dbAdapter = $sm->get('Zend\Db\Adapter\Adapter');
                 $resultSetPrototype = new ResultSet();
                 $resultSetPrototype->setArrayObjectPrototype(new Vehicles());
                 $tableGateway = new TableGateway('vehicles', $dbAdapter, null, $resultSetPrototype);
                 $table = new VehiclesTable($tableGateway);
                 return $table;
             },
             'ApplicationTableGateway' => function ($sm) {
                 $dbAdapter = $sm->get('Zend\Db\Adapter\Adapter');
                 $resultSetPrototype = new ResultSet();
                 $resultSetPrototype->setArrayObjectPrototype(new Vehicles());
                 return new TableGateway('vehicles', $dbAdapter, null, $resultSetPrototype);
             },
         ),
     );
 } 
我不太确定您的
“ApplicationTableGateway”
。有一个“全球”桌面网关似乎很奇怪

此外,我建议您删除配置文件中的匿名函数,并用真实的工厂类替换它们。 这对于页面加载更为有效,因为匿名函数可以防止zend framework创建配置的缓存文件(但并不强制要求工作)

希望这有帮助