ZendFramework函数init()不起作用

时间:2013-03-29 07:57:34

标签: php zend-framework2

我的代码...................:

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

3 个答案:

答案 0 :(得分:3)

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

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

答案 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方法中访问EventManagerinit()