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

fek*_*lee 4 php internationalization symfony xliff

为了在PHP中获得XLIFF/2支持,在另一个答案中,建议使用Symfony 2 Translation组件.

所以我把它从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());
Run Code Online (Sandbox Code Playgroud)

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

PHP Fatal error:  Interface 'Symfony\\Component\\Translation\\TranslatorInterface' not found in /home/ec2-user/layout/vendor/Symfony/Component/Translation/Translator.php on line 25
Run Code Online (Sandbox Code Playgroud)

现在,我可以require_once为每个文件手动添加一个,直到满足所有依赖项,但我不确定这是否是正确的方法.

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

ncr*_*fer 7

使用composer管理您的依赖项.

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

{
    "require": {
        "symfony/translation": "2.4.*"
    }
}
Run Code Online (Sandbox Code Playgroud)

然后下载composer并运行它:

wget http://getcomposer.org/composer.phar
php composer.phar install
Run Code Online (Sandbox Code Playgroud)

您现在可以通过导入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";
Run Code Online (Sandbox Code Playgroud)