【问题标题】:Zend Framework Bootstrap IssueZend 框架引导问题
【发布时间】:2011-06-06 03:54:48
【问题描述】:

我一直在努力安装 Zend Framework 应用程序的新安装,但我不知道发生了什么。我有两个我想使用的自定义操作助手,我想在引导程序中初始化它们。但似乎我的 _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"

我知道该应用程序有些工作,因为它使用了我拥有的布局,我可以在控制器和视图中执行操作并将其输出到页面。我也知道它至少在查看 Bootstrap 文件,因为当我省略一个结束大括号时,我可能会发生 PHP 错误。

这是我的引导文件的一部分:

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 的教程,似乎没有其他人有这个问题。

【问题讨论】:

  • 默认的Bootstrap.php 位置是APPLICATION_PATH "/Bootstrap.php"。你有什么改变它的原因吗?
  • 并非如此。我只是把它放在图书馆里。我可以把它放回去,但我认为它不会改变任何东西。

标签: zend-framework init bootstrapping


【解决方案1】:

您没有正确使用辅助代理。 addPrefix() 用于添加 pluginloader 前缀路径,而不是实际的类。

如果你想添加具体的帮助器(大概使用它们的调度钩子),那么在你的 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"

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

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

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

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

学说实体管理器

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

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

    return $em;
}

您现在可以使用此访问控制器中的实体管理器

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

【讨论】:

  • 我该如何调用 Em.php 或者它是为我加载的?
  • 所以那些 _init 函数正在被调用,但你不能死在它们里面......嗯。谢谢!
  • @Phil 有没有办法从引导程序向控制器传递一些东西?
  • @tubaguy 比如?您可以使用$res = $this->getInvokeArg('bootstrap')->getResource('resource_name')访问应用资源
  • @Phil Doctrine 实体经理?我在我的引导程序中初始化了学说,我想通过调用 $this->em 来运行查询等来允许访问控制器中的 em 对象。
猜你喜欢
  • 2023-03-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多