2014-02-27 43 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';