Я развертываю приложение symfony2 на сервере, где расширение php intl не включено. Я не говорю об этом.
Ответ на этот вопрос предлагает решение: возможно ли отключить внутреннее требование для Symfony?
Я поставил "symfony/intl": "3.0.*@dev" в моем composer.json и все обновляется отлично. Должен ли я сделать что-нибудь еще, чтобы активировать/включить его? В 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
Я смотрю на строку 658 в SymfonyRequirements.php и нахожу:
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') требует, чтобы расширение intl было включено в php, что для меня не является вариантом.
Но что такое INTL_ICU_VERSION? И почему это не определено? И почему компонент symfony/intl не исправит это для меня?
И btw
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
в файл check.php
вы используете, вы увидите, что он не загружает автозагрузчик Composer, поэтому не имеет значения, установлен ли этот компонент Symfony Intl или нет, он будет продолжать сбой, поскольку он выглядит для требуемого расширения, которого нет. Вопрос SO, который вы связали, указывает на то, что проблема решена, но она не говорит, что проверка прошла.
Если это расширение было вашей проблемой с установкой Symfony, и вам нужна только локальная локальная сеть, то проблема должна исчезнуть уже после установки замены Symfony Intl. Хотя, если вы хотите запустить проверку на другие проблемы, вы можете прокомментировать эти строки, чтобы сценарий мог закончить. Не беспокойтесь, что скрипт полностью отделен от фреймворка, вы даже можете удалить его, когда закончите.
Если вы используете Capistrano для развертывания, и вы выполняете эти проверки в каждом развертывании, вы также можете отключить его или настроить этот сценарий для своих нужд.