Intl Component Symfony2

时间:2015-05-28 18:55:35

标签: php symfony

我正在将symfony2应用程序部署到未启用php intl扩展的服务器。我对此没有发言权。

这个问题的答案提出了一个解决方案: Possible to disable intl requirement for 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 exension,这对我来说是没有选择的。

但什么是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给出的一个错误,当我做出改变时消失了。

1 个答案:

答案 0 :(得分:1)

如果您查看正在运行的文件check.php,您会看到它没有加载Composer自动加载器,因此无论您是否安装了Symfony Intl组件,它都没有区别,它会继续失败,因为它正在寻找一个不存在的必需扩展。您链接的SO问题确实提到问题已解决,但并未表示检查已通过。

如果您的Symfony安装出现问题,并且您所需的唯一区域设置是“en”,那么在安装Symfony Intl drop后,问题应该已经消失。虽然如果要对其他问题进行检查,可以注释掉这些行,以便脚本完成。不要担心脚本与框架完全分离,甚至可以在完成后删除它。

如果您使用Capistrano进行部署,并且您在每个部署上运行这些检查,您可能也想要禁用它,或者根据需要自定义该脚本。