簡體   English   中英

國際組件Symfony2

[英]The Intl Component Symfony2

我正在將symfony2應用程序部署到未啟用php intl擴展名的服務器。 我對此沒有發言權。

該問題的答案提出了一個解決方案:是否可以禁用Symfony的國際要求?

我已經在我的composer.json文件中放入了“ symfony / intl”:“ 3.0.*@dev”,並且一切正常。 我還必須做些其他事來激活/啟用它嗎? 在AppKernel中像捆綁包一樣?

現在,在部署服務器上運行check.php時出現以下錯誤:

 PHP Fatal error:  Uncaught exception 'ReflectionException' with message 'Extension intl does not exist' in /web/folk/eirik/030476/releases/20150528181203/app/SymfonyRequirements.php:658
Stack trace:
#0 /web/folk/eirik/030476/releases/20150528181203/app/SymfonyRequirements.php(658): ReflectionExtension->__construct('intl')
#1 /web/folk/eirik/030476/releases/20150528181203/app/check.php(6): SymfonyRequirements->__construct()
#2 {main}
  thrown in /web/folk/eirik/030476/releases/20150528181203/app/SymfonyRequirements.php on line 658

我在SymfonyRequirements.php中查看第658行,發現:

    if (class_exists('Locale')) {
              if (defined('INTL_ICU_VERSION')) {
                $version = INTL_ICU_VERSION;
            } else {
                $reflector = new ReflectionExtension('intl');

                ob_start();
                $reflector->info();
                $output = strip_tags(ob_get_clean());

                preg_match('/^ICU version +(?:=> )?(.*)$/m', $output, $matches);
                $version = $matches[1];
            }

            $this->addRecommendation(
                version_compare($version, '4.0', '>='),
                'intl ICU version should be at least 4+',
                'Upgrade your <strong>intl</strong> extension with a newer ICU version (4+).'
            );
        }

我對這些東西不太了解,但是我假設新的ReflectionExtension('intl')要求在php中啟用intl擴展,這對我來說是沒有選擇的。

但是什么是INTL_ICU_VERSION? 為什么沒有定義? 為什么symfony / intl組件不能為我解決這個問題?

和順便說一句

if (class_exists('Collator')) {
           $this->addRecommendation(
               null !== new Collator('FR_fr'),
               'intl extension should be correctly configured',
            'The intl extension does not behave properly. This problem is       typical on PHP 5.3.X x64 WIN builds.'
        );
    }

我還在這里將“ FR_fr”更改為“ en”,這是check.php給出的錯誤,當我進行更改時該錯誤消失了。

如果查看運行中的文件check.php ,您會看到它沒有加載Composer自動加載器,因此,無論是否安裝了Symfony Intl組件都不會造成任何影響,它會一直失敗,因為它看上去所需的擴展名不存在。 您鏈接的SO問題確實提到問題已解決,但並不表示檢查通過。

如果該擴展程序是您在Symfony安裝中遇到的問題,並且唯一需要的語言環境是“ en”,則在安裝了Symfony Intl替代產品后,該問題應該已經消失了。 雖然如果您要運行其他問題的檢查,但是可以注釋掉這些行,以便腳本可以完成。 不必擔心腳本與框架完全脫鈎,甚至可以在完成后將其刪除。

如果將Capistrano用於部署,並且在每個部署上運行這些檢查,則可能也要禁用該檢查,或者根據需要自定義該腳本。

暫無
暫無

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

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