7

我正在将 Symfony 1.2 项目移植到 Symfony 2.x。我目前正在运行最新的 2.1.0-dev 版本。

在我的旧项目中,我有一个名为 Tools 的类,它具有一些简单的功能,例如将数组转换为字符串和从字符串生成 slug。我想在我的新项目中使用这个类,但我不清楚如何在包之外使用这个类。

我在这里查看了各种建议更改 app/autoload.php 的答案,但我的 autoload.php 看起来与答案中的不同,也许在 2.0 和 2.1 之间发生了一些变化。

我想将我的课程保留在我的 src 或 app 目录中,因为它们处于源代码控制之下。我的供应商目录不是我使用作曲家来处理的。

任何建议将不胜感激。

4

2 回答 2

12

另一种方法是使用 /app/config/autoload.php:

<?php

use Doctrine\Common\Annotations\AnnotationRegistry;

$loader = require __DIR__.'/../vendor/autoload.php';
$loader->add( 'YOURNAMESPACE', __DIR__.'/../vendor/YOURVENDOR/src' );


// intl
if (!function_exists('intl_get_error_code')) {
    require_once  _DIR__.'/../vendor/symfony/symfony/src/Symfony/Component/Locale/Resources/stubs/functions.php';

    $loader->add('', __DIR__.'/../vendor/symfony/symfony/src/Symfony/Component/Locale/Resources/stubs');
}

AnnotationRegistry::registerLoader(array($loader, 'loadClass'));

return $loader;

只需将 YOURNAMESPACE 和 YOURVENDOR 替换为您的值即可。到目前为止,对我来说效果很好。

你是对的,我偶然发现了自动加载从 2.0 到 2.1 的变化。上面的代码适用于我将项目升级到的最新版本;-)

于 2012-10-05T12:36:50.927 回答
7

Common对于像这样的简单情况,最快的解决方案是直接在下面创建一个文件夹(例如)src并将您的类放入其中。

src
  -- Common
    -- Tools.php

Tools.php包含具有适当命名空间的类,例如

<?php

namespace Common;

class Tools
{
    public static function slugify($string)
    {
        // ...
    }
}

在调用你的函数之前不要忘记use语句

use Common\Tools;

// ...
Tools::slugify('my test string');

如果您src按照上述正确的文件夹结构和命名空间放置您的代码,它将无需接触app/autoload.php.

于 2012-08-21T09:33:40.603 回答