从我的工厂我将serviceLocator传递给控制器,但似乎没有调用ObservationFactory,即使我已经包含在模块的module.config.php文件中
这是我的ObservationController.php
class ObservationController extends AbstractActionController
{
private $em;
public function __construct($ob)
{
$this->em = $ob->get('doctrine.entitymanager.orm_default');
}
这里是ObservationFactory.php
class ObservationFactory implements FactoryInterface
{
public function createService(ServiceLocatorInterface $serviceLocator)
{
$controller = new ObservationController($serviceLocator->getServicelocator());
return $controller;
}
}
并在Module.config.php
中'controllers' => array(
'factories' => array(
'Observation\Controller\ObservationController' => 'Observation\Controller\ObservationFactory'
),
'invokables' => array(
'Observation\Controller\Observation'=> Controller\ObservationController::class
),
),
缺少观察1的Observation \ Controller \ ObservationController :: __ construct(),在第207行的S:\ xampp \ htdocs \ v3 \ vendor \ zendframework \ zend-servicemanager \ src \ AbstractPluginManager.php中调用,并在S中定义:第47行\ xampp \ htdocs \ v3 \ module \ Observation \ src \ Observation \ Controller \ ObservationController.php
注意:未定义的变量:ob in S:\ XAMPP \ htdocs中\ V3 \模块\观察的\ src \观察\控制器\ ObservationController.php 第49行
致命错误:未捕获错误:调用成员函数get()
中未知
答案 0 :(得分:2)
当您的ObservationController
在其构造函数中使用参数时,您不再需要将控制器调用为invokables
。它不会起作用。因为不能使用参数构造可调用的类。
然而,无论何时您需要控制器的参数,您都应该为该控制器建立一个您已经做过的工厂。只需隐藏或删除ObservationController
密钥下的invokables
,如下所示
'controllers' => array(
'factories' => array(
'Observation\Controller\Observation' => 'Observation\Controller\ObservationFactory'
),
'invokables' => array(
// 'Observation\Controller\Observation'=> Controller\ObservationController::class
),
),
答案 1 :(得分:2)
如果要为ZF3准备代码,请使用以下结构:
return [
'controllers' => [
'aliases' => [
'Observation\Controller\Observation' => Observation\Controller\ObservationController::class,
],
'factories' => [
Observation\Controller\ObservationController::class => Observation\Controller\ObservationControllerFactory::class,
],
],
];