zend-framework - Zend Framework Bootstrap 问题

标签 zend-framework init bootstrapping

一段时间以来,我一直致力于 Zend Framework 应用程序的新安装,但我无法弄清楚发生了什么。我有两个我想使用的自定义 Action 助手,我想在 Bootstrap 中初始化它们。但似乎我的 _init 函数根本没有被调用。在启动应用程序的 index.php 中:

require('Zend/Application.php');

$app = new Zend_Application(APPLICATION_ENV, APPLICATION_PATH 
.'/configs/application.ini');

$app->bootstrap()->run();

这是我在 application.ini 文件中的内容:

[production]

appnamespace = "Application_Name"

includePaths.library = APPLICATION_PATH "/../library"

bootstrap.path = "/home/user/website/includes/library/Application_Name/Resource/Bootstrap.php"

bootstrap.class = "Bootstrap"

resources.frontController.controllerDirectory = APPLICATION_PATH "/controllers"

resources.layout.layoutPath = APPLICATION_PATH "/layouts/scripts"

resources.view[] =

autoloaderNamespaces[] = "Application_Name"

pluginPaths.Application_Name_Resource = "Application_Name/Resource"

我知道该应用程序可以正常运行,因为它使用的是我拥有的布局,我可以在 Controller 和 View 中执行操作并将其输出到页面。我也知道它至少会查看 Bootstrap 文件,因为当我遗漏结束大括号时可能会发生 PHP 错误。

这是我的 Bootstrap 文件的一部分:

class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
{

        public function _init()
        {
                Zend_Controller_Action_HelperBroker::addPrefix(new Application_Name_Controller_Action_Helper_ResourceInjector());
                Zend_Controller_Action_HelperBroker::addPrefix(new Application_Name_Controller_Action_Helper_Em());
        }

知道为什么会这样,或者看到我在配置中搞砸了什么?我查看了数十篇关于如何配置 Zend 的教程,似乎没有其他人遇到过这个问题。

最佳答案

您没有正确使用助手代理。 addPrefix() 用于添加插件加载器前缀路径,而不是实际类。

如果你想添加具体的助手(大概是使用它们的调度钩子(Hook)),那么在你的 Bootstrap 类中放置这样的东西

protected function _initActionHelpers()
{
    $helper = new My_Helper;
    Zend_Controller_Action_HelperBroker::addHelper($helper);
}

对于常规的运行时助手,您可以轻松地在配置中添加前缀路径,例如

resources.frontController.actionHelperPaths.ProEquipTrack_Controller_Action_Helper = "ProEquipTrack/Controller/Action/Helper"

这些将在调用时由代理自动加载,例如( Controller 上下文)

$resourceInjector = $this->getHelper('ResourceInjector');
$em = $this->getHelper('Em');

或者使用策略模式(direct()方法)

$this->_helper->resourceInjector($arg1, $arg2 /*, etc */);

Doctrine 实体管理器

在你的 Bootstrap 类中做这样的事情

protected function _initDoctrine()
{
    // initialise and create entity manager
    $em = // whatever

    return $em;
}

您现在可以使用它访问 Controller 中的实体管理器

$em = $this->getInvokeArg('bootstrap')
           ->getResource('doctrine');

关于zend-framework - Zend Framework Bootstrap 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6247605/

相关文章:

php - Zend Framework 和防止胖 Controller

Java 应用程序作为系统服务

java - 小程序未初始化

Python 类 - 如何创建接受未定义数量的参数的类?

php - 停止模块引导执行

php - 使用 Zend Framework 相对于 CodeIgniter 的优势

php - 为 Zend_Db 设置字符集的最佳方式(或至少比我目前正在做的更好)

.NET Bootstrap 无需设置

javascript - 引导 angularjs 后加载 Controller

php - 在接口(interface)(OOP)中添加属性是一个好习惯吗