-->

在Symfony的2.1自动加载类(Autoloading a class in Symfony 2

2019-06-27 04:39发布

我移植一个Symfony的1.2项目,Symfony的2.x的 我目前运行最新的2.1.0-dev的释放。

从我的老项目,我有一个类叫做工具,有喜欢的事情改写(munging)数组转换为字符串并从字符串产生蛞蝓一些简单的功能。 我想在我的新项目中使用这个类,但我不清楚如何使用这个类捆绑之外。

我在这里看到不同的答案,其中建议改变应用程序/ autoload.php但我autoload.php看起来在回答各种问题不同,也许事情已经改变了这里2.0和2.1之间。

我想继续我的课,我SRC或应用程序目录,因为他们是源代码控制之下。 我的供应商目录不是我使用作曲家照顾那个。

任何意见将在这里感谢。

Answer 1:

对于一个简单的情况下,像这样快捷的解决方案是创建一个文件夹(例如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



Answer 2:

另一种方法是使用/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。 上面的代码工作正常使用的最新版本,而我升级我的项目;-)



文章来源: Autoloading a class in Symfony 2.1
标签: symfony-2.1