在Symfony 2.1中自动加载一个类

时间:2012-08-20 21:36:29

标签: symfony-2.1

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

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

我在这里看了各种答案,建议更改app / autoload.php,但我的autoload.php看起来与答案中的不同,可能在2.0和2.1之间有所改变。

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

这里有任何建议。

2 个答案:

答案 0 :(得分: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。以上代码适用于我升级项目的最新版本; - )

答案 1 :(得分: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即可使用。