1

我的代码…………:

<?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() ?

4

3 回答 3

3

由于 ZF2 可以安全地使用构造函数__construct(),因此旧 init()方法已被删除。

http://www.mwop.net/blog/2012-07-30-the-new-init.html

于 2013-03-29T08:05:47.847 回答
1

这在 ZF2 中发生了变化。如果你想完成同样的事情,要么在控制器的构造函数(__construct())中完成,或者如果你需要做很多花哨的事情,你应该为你的控制器创建一个工厂并在模块配置中定义它。

 'controllers' => array(
     'factories' => array(
          'TestController' => 'Your\Namespace\TestControllerFactory'
     )
 )

TestControllerFactory 应该实现 Zend\ServiceManager\FactoryInterface,这意味着它应该实现 createService 方法。

于 2013-03-29T08:06:05.290 回答
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
}

在堆栈底部添加初始化程序是好的,因为内置初始化程序将首先被调用,因此您将可以访问ServiceLocatorEventManager方法init()

于 2013-03-30T13:00:01.377 回答