首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Intl组件Symfony2

Intl组件Symfony2
EN

Stack Overflow用户
提问于 2015-05-29 02:55:35
回答 1查看 440关注 0票数 1

我正在将一个symfony2应用程序部署到没有启用php intl扩展的服务器上。我在这件事上没有发言权。

这个问题的答案提供了一个解决方案:Possible to disable intl requirement for Symfony?

我在composer.json中输入了"symfony/intl":"3.0.*@dev“,一切都更新得很好。我必须执行更多操作才能激活/启用它吗?在AppKernel中,就像捆绑包一样?

现在,当我在部署服务器上运行check.php时,我得到了以下错误:

代码语言:javascript
复制
 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行,发现:

代码语言:javascript
复制
    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组件不能为我解决这个问题呢?

和btw

代码语言:javascript
复制
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给出的一个错误,当我进行更改时,该错误消失了。

EN

回答 1

Stack Overflow用户

发布于 2015-05-29 18:26:25

如果你查看你正在运行的文件check.php,你会发现它没有加载Composer自动加载器,因此无论你是否安装了Symfony Intl组件,它都会一直失败,因为它正在寻找一个不存在的所需扩展名。你链接的SO问题确实提到了问题得到了解决,但并没有说检查通过了。

如果这个扩展是您的Symfony安装的问题,而您唯一需要的区域设置是"en“,那么在您安装了Symfony Intl drop in replacement之后,这个问题就应该已经解决了。不过,如果您想检查和其他问题,可以注释掉这些行,这样脚本就可以结束了。不要担心脚本与框架完全解耦,你甚至可以在完成后将其删除。

如果您正在使用Capistrano进行部署,并且在每个部署上都运行这些检查,那么您可能希望禁用该功能,或者根据需要自定义该脚本。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30514928

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档