一段时间以来,我一直致力于 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/