簡體   English   中英

在非Symfony項目中使用Symfony 2組件?

[英]Use Symfony 2 component in non-Symfony project?

為了在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());

這不起作用,因為需要加載其他組件:

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組件? 這是個壞主意嗎?

使用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";

如何使用Composer來管理依賴項。

這里的要點是它還管理自動加載,

文檔中

自動加載

除了下載庫之外,Composer還准備了一個自動加載文件,該文件能夠自動加載它下載的任何庫中的所有類。 要使用它,只需在代碼的引導過程中添加以下行:

require 'vendor/autoload.php';

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM