通过 Composer 安装 Symfony 2.3.x 时的 lib-icu 依赖项问题

2022-08-30 07:20:49

我使用Composer安装Symfony 2.2.x没有问题,我总是在 http://symfony.com/download 复制稳定版本。

composer create-project symfony/framework-standard-edition myproject/ 2.2.1

(我已经在全球范围内安装了Composer)
对2.3.0-RC1感到好奇,我认为这会顺利进行:

composer create-project symfony/framework-standard-edition mynewerproject/ 2.3.0-RC1

但是由于以下错误而关闭:

Your requirements could not be resolved to an installable set of packages.

Problem 1
    - symfony/icu v1.2.0-RC1 requires lib-icu >=4.4 -> the requested linked library icu has the wrong version installed or is missing from your system, make sure to have the extension providing it.
    - symfony/icu v1.1.0-RC1 requires lib-icu >=3.8 -> the requested linked library icu has the wrong version installed or is missing from your system, make sure to have the extension providing it.
    - symfony/symfony v2.3.0-RC1 requires symfony/icu >=1.0,<2.0 -> satisfiable by symfony/icu[v1.1.0-RC1, v1.2.0-RC1].
    - Installation request for symfony/symfony 2.3.* -> satisfiable by symfony/symfony[v2.3.0-RC1].

我需要调整 composer.json 文件吗?


解决方案更新

我错过了提供lib-icuphp intl扩展

如此简单,安装和配置 intl 扩展。从 PHP 5.3 开始,国际扩展模块是默认分发的,但某些发行版(如 MAMP)没有 Intl,因此您需要获取它。我用了梨

我的步骤:

  • 安装 Intl 扩展(由 PECL 维护): — 您可能需要先将 pecl 通道添加到 pear。$ pear install pecl/intl
  • 如果您使用MAMP并且从未使用过pear / pecl,请查看lullabot的有用博客文章;MAMP不随php源代码一起提供,因此您必须下载php版本的源代码并将源代码移入(如博客文章中所述)/Applications/MAMP/bin/php/php[version]/include/php
  • PEAR找不到我的php.ini,所以我不得不手动添加到php.ini。在MAMP中.ini您可以通过转到文件>编辑模板>php来轻松编辑php。[版本].iniextension=intl.so

命令行:

  • 当使用 Composer 或 Symfony 的 Console CLI 时,您还需要 Intl,并且由于 CLI 通常使用不同的 CLI,因此您还需要在此处添加扩展指令。要查找 CLI 的 php.ini只需发现文件路径并添加到该 php.ini即可。phpphp.ini$ php -i |grep php\.iniextension=intl.so
  • 要检查是否安装了Intl,您可以检查可用的模块。$ php -m

答案 1

更新你的php-intl扩展,这就是icu错误的来源!

sudo aptitude install php5-intl                 // i.e. ubuntu
brew install icu4c                              // osx

检查扩展是否已启用并在php中正确配置.ini以及。

( 提示: php-cli 有时使用不同的 php.ini )

php.ini

extension=intl.so       ; *nix
extension=php_intl.dll  ; windows

[intl]
intl.default_locale = en_utf8
intl.error_level = E_WARNING

从终端检查您的 AND,如果扩展已成功启用。phpinfo()php -m

通过以下方式从 php 检查您当前的 intl 版本:

Intl::getIcuVersion();
Intl::getIcuDataVersion();

注意:不再需要了symfony 2.3同时发布) )

将最小稳定性标志@dev或@rc添加到您的依赖项中,如下所示:

composer create-project symfony/framework-standard-edition mynewerproject/ 2.3.*@dev 

composer 中的默认稳定性是稳定的,symfony 2.3 分支当前不是(它是 @rc )。在此处阅读更多稳定性标志。


答案 2

许多应用程序将仅支持“en”区域设置,并且不需要翻译功能或php-intl。如果这是你,或者你不能在你的服务器上安装php-intl,你可以显式地将symfony/icu ~1.0添加到你的.1.0 不需要 php-intl,而 1.1+ 则不需要。composer.json

如果您不需要翻译功能:

$ php bin/composer.phar require symfony/icu ~1.0

如果没有此声明并尝试安装 symfony/symfony 2.3 Composer 可能会尝试安装 symfony/icu ~1.2,这将需要您安装 php-intl。

这在 Symfony Intl Component 的“ICU 和部署问题”下的文档中有更详细的介绍。


推荐