草庐IT

php - Zend Resource Autoloader 不适用于命名空间

coder 2024-04-15 原文

我在 Zend Framework 上遇到了这种自动加载问题。基本上在库文件夹中有一个名为 LunaZend 的文件夹。 LunaZend 有一些可以在 Zend Framework 中使用的类,这些类有 namespace 并且必须仅通过调用 namespace 名称自动加载。 命名空间就像 LunaZend\DB, LunaZend\Etc ... 在 Bootstrap 中,我有一个 _initAutoLoadNS 函数,它有

$resource = new Zend_Loader_Autoloader_Resource(array(
                        'basePath'  =>  APPLICATION_PATH.'/../library/LunaZend/',
                        'namespace' => 'LunaZend')
       );

我希望能够仅通过调用 like 来加载 Zend Framework 中的类

$t = new LunaZend\Di\DependencyInjector();

但是我得到了错误

Fatal error: Class 'LunaZend\Di\DependencyInjector' not found in... What am I doing wrong? How to deal with this namespace autoloading issue?

谢谢。

最佳答案

是的,这个问题似乎偶尔会弹出,直到您掌握了 ZF 中的 namespace (本地 namespace )。这是我对此的看法。这适用于所有只想正确加载一些使用 namespace 的第三方的人。非常简单。

我正在使用 ZF 1.11.11(根据文档,所有 ZF 版本 1.10+ 都可以工作)。

首先,从 1.10 开始,ZF 支持原生 PHP 命名空间自动加载,前提是它们符合 PSR-0 standard .

我想在 ZF1 项目中添加 Symfony2 EventManager 组件。
首先,与类名一样,命名空间必须与库中的路径匹配。 因此,命名空间 Symfony\Component\EventDispatcher\EventDispatcher 映射到 path/to/lib/Symfony/Component/EventDispatcher/EventDispatcher.php (其中 path/to/lib/APPLICATION_PATH . '/library';你明白了)。我必须提到库文件夹必须在 include_path 中吗?不,我想我不知道。

现在是不那么棘手的部分:

<?php

// bootstrap.php
class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
{
    protected function _initNsAutoload()
    {
        $loader = Zend_Loader_Autoloader::getInstance();
        $loader->registerNamespace('Symfony'); // this is why is dead simple

        /* Don't believe me? Try it:

        Zend_Registry::set('events', new Symfony\Component\EventDispatcher\EventDispatcher());

        */
    }
}

在 Controller 中使用命名空间导入怎么样?

<?php

use Symfony\Component\EventDispatcher\Event, 
    Symfony\Component\EventDispatcher\EventDispatcher;

class IndexController extends Zend_Controller_Action
{
    public function indexAction()
    {
        var_dump(new EventDispatcher());
        var_dump(new Event());
    }
}

因此,只要您使用的是 ZF 1.10+,就不需要自定义自动装载机。这个回复是我偷看this后做出的.

LE: 或将此添加到 application.ini:
autoloaderNamespaces[] = Symfony

关于php - Zend Resource Autoloader 不适用于命名空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6409424/

有关php - Zend Resource Autoloader 不适用于命名空间的更多相关文章

  1. ruby-on-rails - Rails 常用字符串(用于通知和错误信息等) - 2

    大约一年前,我决定确保每个包含非唯一文本的Flash通知都将从模块中的方法中获取文本。我这样做的最初原因是为了避免一遍又一遍地输入相同的字符串。如果我想更改措辞,我可以在一个地方轻松完成,而且一遍又一遍地重复同一件事而出现拼写错误的可能性也会降低。我最终得到的是这样的:moduleMessagesdefformat_error_messages(errors)errors.map{|attribute,message|"Error:#{attribute.to_s.titleize}#{message}."}enddeferror_message_could_not_find(obje

  2. Ruby Sinatra 配置用于生产和开发 - 2

    我已经在Sinatra上创建了应用程序,它代表了一个简单的API。我想在生产和开发上进行部署。我想在部署时选择,是开发还是生产,一些方法的逻辑应该改变,这取决于部署类型。是否有任何想法,如何完成以及解决此问题的一些示例。例子:我有代码get'/api/test'doreturn"Itisdev"end但是在部署到生产环境之后我想在运行/api/test之后看到ItisPROD如何实现? 最佳答案 根据SinatraDocumentation:EnvironmentscanbesetthroughtheRACK_ENVenvironm

  3. ruby-on-rails - 如何重命名或移动 Rails 的 README_FOR_APP - 2

    当我在我的Rails应用程序根目录中运行rakedoc:app时,API文档是使用/doc/README_FOR_APP作为主页生成的。我想向该文件添加.rdoc扩展名,以便它在GitHub上正确呈现。更好的是,我想将它移动到应用程序根目录(/README.rdoc)。有没有办法通过修改包含的rake/rdoctask任务在我的Rakefile中执行此操作?是否有某个地方可以查找可以修改的主页文件的名称?还是我必须编写一个新的Rake任务?额外的问题:Rails应用程序的两个单独文件/README和/doc/README_FOR_APP背后的逻辑是什么?为什么不只有一个?

  4. ruby - rails 3 redirect_to 将参数传递给命名路由 - 2

    我没有找到太多关于如何执行此操作的信息,尽管有很多关于如何使用像这样的redirect_to将参数传递给重定向的建议:action=>'something',:controller=>'something'在我的应用程序中,我在路由文件中有以下内容match'profile'=>'User#show'我的表演Action是这样的defshow@user=User.find(params[:user])@title=@user.first_nameend重定向发生在同一个用户Controller中,就像这样defregister@title="Registration"@user=Use

  5. ruby - inverse_of 是否适用于 has_many? - 2

    当我使用has_one时,它​​工作得很好,但在has_many上却不行。在这里您可以看到object_id不同,因为它运行了另一个SQL来再次获取它。ruby-1.9.2-p290:001>e=Employee.create(name:'rafael',active:false)ruby-1.9.2-p290:002>b=Badge.create(number:1,employee:e)ruby-1.9.2-p290:003>a=Address.create(street:"123MarketSt",city:"SanDiego",employee:e)ruby-1.9.2-p290

  6. ruby-on-rails - 从应用程序中自定义文件夹内的命名空间自动加载 - 2

    我们目前正在为ROR3.2开发自定义cms引擎。在这个过程中,我们希望成为我们的rails应用程序中的一等公民的几个类类型起源,这意味着它们应该驻留在应用程序的app文件夹下,它是插件。目前我们有以下类型:数据源数据类型查看我在app文件夹下创建了多个目录来保存这些:应用/数据源应用/数据类型应用/View更多类型将随之而来,我有点担心应用程序文件夹被这么多目录污染。因此,我想将它们移动到一个子目录/模块中,该子目录/模块包含cms定义的所有类型。所有类都应位于MyCms命名空间内,目录布局应如下所示:应用程序/my_cms/data_source应用程序/my_cms/data_ty

  7. ruby-on-rails - Rails - 从命名路由中提取 HTTP 动词 - 2

    Rails中有没有一种方法可以提取与路由关联的HTTP动词?例如,给定这样的路线:将“users”匹配到:“users#show”,通过:[:get,:post]我能实现这样的目标吗?users_path.respond_to?(:get)(显然#respond_to不是正确的方法)我最接近的是通过执行以下操作,但它似乎并不令人满意。Rails.application.routes.routes.named_routes["users"].constraints[:request_method]#=>/^GET$/对于上下文,我有一个设置cookie然后执行redirect_to:ba

  8. ruby - "undefined method"用于 rails 模型 - 2

    我正在使用带有Rails的Devise,我想添加一个方法“getAllComments”,所以我这样写:classUser在我的Controller中:defdashboard@user=current_user@comments=@user.getAllComments();end当我访问我的url时,我得到了undefinedmethod`getAllComments'for#我做错了什么?谢谢 最佳答案 因为getAllComments是一个类方法,而您正试图将其作为实例方法访问。您要么需要访问它:User.getAllCom

  9. Ruby on Rails regexp equals-tilde 与 array include 用于检查选项列表 - 2

    我正在使用Rails3.2.3和Ruby1.9.3p0。我发现我经常需要确定某个字符串是否出现在选项列表中。看来我可以使用Ruby数组.includemethod:或正则表达式equals-tildematchshorthand用竖线分隔选项:就性能而言,一个比另一个好吗?还有更好的方法吗? 最佳答案 总结:Array#include?包含String元素,在接受和拒绝输入时均胜出,对于您的示例只有三个可接受的值。对于要检查的更大的集合,看起来Set#include?和String元素可能会获胜。如何测试我们应该根据经验对此进行测试

  10. ruby - 使用 Nokogiri 和 Ruby 命名元素 "text" - 2

    我在尝试使用Nokogiri构建XML文档时遇到了一个小问题。我想将我的元素之一称为“文本”(请参阅​​下面粘贴代码的最底部)。通常,要创建一个新元素,我会执行类似以下的操作xml.text--但它似乎是.text是Nokogiri已经用来做其他事情的方法。因此,当我写这行时xml.textNokogiri没有创建名为的新元素但只是写了意味着成为元素内容的文本。我怎样才能让Nokogiri实际制作一个名为的元素??builder=Nokogiri::XML::Builder.newdo|xml|xml.TEI("xmlns"=>"http://www.tei-c.org/ns/1.0"

随机推荐