2014-02-27 47 views
4

为了获得PHP中的XLIFF/2支持,在another answer中,建议使用Symfony 2 Translation组件的 。在非Symfony项目中使用Symfony 2组件?

于是我下载了它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组件?这是一个不好的主意吗?

+4

更好地使用[composer](https://getcomposer.org)进行自动加载类 –

+0

也显示你的文件的路径,你想包括翻译,请 –

回答

7

作曲家管理您的依赖。

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

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

然后下载作曲并运行它:

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

您现在可以通过导入作曲家自动加载使用组件

<?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来管理您的依赖关系。

这里的一点是,它也管理自动加载,

documentation

自动加载#

除了下载库,作曲家还准备了自动加载 文件能够自动加载任何 库中的所有类试图下载它。要使用它,只需添加以下行 你的代码的引导过程:

require 'vendor/autoload.php';