如何在非Symfony项目中使用Symfony 2组件?

4

要在PHP中获得XLIFF/2支持,另一个答案建议使用Symfony 2翻译组件。

因此,我从Github下载了它,并将其放置在目录../vendor/中,尝试着使用它:

<?php

    require_once '../vendor/Symfony/Component/Translation/Translator.php';
    require_once '../vendor/Symfony/Component/Translation/MessageSelector.php';
    require_once '../vendor/Symfony/Component/Translation/Loader/ArrayLoader.php';

    use Symfony\Component\Translation\Translator;
    use Symfony\Component\Translation\MessageSelector;
    use Symfony\Component\Translation\Loader\ArrayLoader;

    $translator = new Translator('fr_FR', new MessageSelector());

这不起作用,因为其他组件需要被加载:

PHP Fatal error:  Interface 'Symfony\\Component\\Translation\\TranslatorInterface' not found in /home/ec2-user/layout/vendor/Symfony/Component/Translation/Translator.php on line 25

现在,我可以手动添加require_once来满足所有依赖关系,但我不确定这是否是正确的方法。

我如何在非Symfony项目中使用单个Symfony 2组件?这是一个坏主意吗?


4
最好使用composer来自动加载类。 - Victor Bocharsky
请提供您想要包含翻译器的文件路径。 - Victor Bocharsky
2个回答

7

使用Composer管理您的依赖。

首先在您的项目文件夹中创建一个composer.json文件:

{
    "require": {
        "symfony/translation": "2.4.*"
    }
}

然后下载Composer并运行它:
wget http://getcomposer.org/composer.phar
php composer.phar install

现在您可以通过导入composer自动加载器来使用您的组件:

<?php

    require_once('vendor/autoload.php');

    use Symfony\Component\Translation\Translator;
    use Symfony\Component\Translation\MessageSelector;
    use Symfony\Component\Translation\Loader\ArrayLoader;

    $translator = new Translator('fr_FR', new MessageSelector());
    $translator->setFallbackLocales(array('fr'));
    $translator->addLoader('array', new ArrayLoader());
    $translator->addResource('array', array(
        'Hello World!' => 'Bonjour',
    ), 'fr');

    echo $translator->trans('Hello World!')."\n";

3

使用Composer管理您的依赖项如何?

这个工具不仅可以管理依赖项,还可以管理自动加载。

文档中了解更多信息:

自动加载#

Composer不仅会下载库文件,还会准备自动加载文件,可以自动加载其下载的任何库中的所有类。只需将以下行添加到代码的引导过程中即可使用它:

require 'vendor/autoload.php';

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接