【问题标题】:Loading namespaced classes with Symfony 1.4's autoloader?使用 Symfony 1.4 的自动加载器加载命名空间类?
【发布时间】:2011-09-09 09:26:24
【问题描述】:

如何在 Symfony 1.4 中为自动加载器类功能(如 Symfony 2.0)注册命名空间(使用 PHP 5.3)?

【问题讨论】:

  • 你最终能否让 Symfony 1.4 自动加载与命名空间一起工作?如果是这样,你能告诉我怎么做吗?

标签: php namespaces symfony-1.4 autoload


【解决方案1】:

您可以使用Composer,这非常简单。只需将它安装在你的机器上(你可能已经在 2015 年了)并在你的项目文件夹中运行:

composer init 

然后,您可以使用 composer 安装所有您想要的软件包,并在您的 ProjectConfiguration.class.php 中仅包含这一行:

require_once __DIR__.'/../vendor/autoload.php';

请注意,如果您更改了默认 Symfony1.4 目录结构,路径可能会有所不同。

【讨论】:

  • Symfony 1.4 不知道如何在命名空间中加载类,你必须实现这个特性。 Composer 只是一个包/库管理器。
  • Composer 也提供了一个 ClassLoader,当您安装(使用 Composer 俚语“require”)包时,您所要做的就是包含上面的 vendor/autoload.php 脚本。 Composer 负责映射已安装包中的命名空间,所有这些。你试过了吗?我这样做了,效果很好。
  • 感谢您为我提供的解决方案。您需要指定 vendor-dir: "lib/vendor" 以在 sf 1.4 的原始供应商目录中拥有库;将它用于 amp-library,它工作正常。
【解决方案2】:

您可以在 Symfony 1.4 框架中使用来自 Symfony2 的 Autoloader。

1.将 Symfony2 类加载器复制到 Symfony 1.4 沙盒项目的供应商目录:

SF_ROOT_DIR/lib/vendor/Symfony2/src/Symfony/Component/ClassLoader/UniversalClassLoader.php

SF_ROOT_DIR/lib/vendor/Symfony2/src/Symfony/Component/ClassLoader/ApcUniversalClassLoader.php

2.修改你的 SF_ROOT_DIR/config/ProjectConfiguration.class.php 文件如下:

require_once dirname(__FILE__) . '/../lib/vendor/symfony/lib/autoload/sfCoreAutoload.class.php';
require_once dirname(__FILE__) . '/../lib/autoload/sfClassLoader.class.php';
sfCoreAutoload::register();

class ProjectConfiguration extends sfProjectConfiguration {

    public function setup() {
        $this->namespacesClassLoader();
        $this->enablePlugins('sfDoctrinePlugin');
    }

    public function namespacesClassLoader() {
       if (extension_loaded('apc')) {
           $loader = new ApcUniversalClassLoader('S2A');
       } else {
           $loader = new UniversalClassLoader();
       }
       $loader->registerNamespaces(array(
          'Pohon' => __DIR__ . '/../lib/vendor/Pohon/src'));
       $loader->register();
    }

}

3. 注册所需的命名空间:
例如。我要加载类:

Pohon\Tools\String\Utils\Slugify。

文件名必须是:

SF_ROOT_DIR/lib/vendor/Pohon/src/Pohon/Tools/String/Utils/Slugify.php

并注册命名空间如下:

Pohon => SF_ROOT_DIR/lib/vendor/Pohon/src

【讨论】:

【解决方案3】:

Symfony 使用 spl_autoload_register() 函数来注册它自己的自动加载器 (sfAutoload)。

您可以在项目/应用程序/插件的initialize() 函数中注册自己的处理程序。 (以适用者为准)。

这也是Swift_Mailer 插件的作用:它在需要时注册自己的自动加载器。

【讨论】:

    猜你喜欢
    • 2014-03-30
    • 1970-01-01
    • 2017-11-03
    • 2021-06-29
    • 1970-01-01
    • 2015-07-30
    • 2013-10-24
    • 2013-05-16
    相关资源
    最近更新 更多