我的代码...................:
<?php
namespace Application\Controller;
use Zend\Mvc\Controller\AbstractActionController;
use Zend\View\Model\ViewModel;
class IndexController extends AbstractActionController
{
public function init()
{
echo 'init worked';
}
public function indexAction()
{
return new ViewModel();
}
public function testAction()
{
echo 'test';
}
}
为什么init函数不起作用?也许我需要改变一些配置?或者我需要使用标准的php __construct()?
答案 0 :(得分:3)
由于ZF2使用构造函数__construct()
是安全的,因此旧的init()
方法已被删除。
答案 1 :(得分:1)
这在ZF2中发生了变化。如果你想在控制器的构造函数(__construct())中完成同样的事情,或者如果你需要做很多花哨的东西,你应该为你的控制器创建一个Factory并在模块配置中定义它。 / p>
'controllers' => array(
'factories' => array(
'TestController' => 'Your\Namespace\TestControllerFactory'
)
)
TestControllerFactory应该实现Zend \ ServiceManager \ FactoryInterface,这意味着它应该实现createService方法。
答案 2 :(得分:0)
您可以添加自定义初始值设定项以使init()
方法有效:
// in your Module class
public function onBootstrap($e)
{
$cl = $e->getApplication()->getServiceManager()->get('ControllerLoader');
$cl->addInitializer(function ($controller, $serviceManager) {
if (method_exists($controller, 'init')) {
$controller->init();
}
}, false); // false means the initializer will be added in the bottom of the stack
}
在堆栈底部添加初始化程序很好,因为首先会调用内置初始化程序,因此您可以在ServiceLocator
方法中访问EventManager
和init()
。