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

时间:2014-02-27 09:18:36

标签: php symfony internationalization xliff

为了在PHP中获得XLIFF / 2支持,在another answer中,有人建议使用 使用Symfony 2 Translation组件。

所以我将它from 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组件?那是一个 坏主意?

2 个答案:

答案 0 :(得分:7)

使用 composer 管理您的依赖项。

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

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

然后下载作曲家并运行它:

wget http://getcomposer.org/composer.phar
php composer.phar install

您现在可以通过导入composer autoloader来使用您的组件:

<?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";

答案 1 :(得分:3)

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

这里的要点是它还管理自动加载,

来自documentation

  

<强>自动加载#

     

除了下载库之外,Composer还准备了自动加载   能够自动加载任何类中的所有类的文件   它下载的库。要使用它,只需添加以下行即可   代码的引导过程:

require 'vendor/autoload.php';