После обновления symfony на версию 3.3 и выше вы обнаружите, что при старте встроенного веб-сервера:
bin/console server:start
Команда server:start
не отрабатывает, так как возникает ошибка "There are no commands defined in the "server" namespace.". См. скриншот:
Ошибка связана с тем, что server команды были перемещены из ядра symfony в отдельный WebServerBundle в symfony 3.3. Если вы обновляли symfony с более старой версии, то подключение WebServerBundle бандла будет отсутствовать в файле app/AppKernel.php.
Нужно подключить WebServerBundle файл так же, как подключаются остальные файлы бандлов в функции registerBundles
. Достаточно это сделать для dev environment. Файл app/AppKernel.php::registerBundles
.
file app/AppKernel.php :
Было:
if (in_array($this->getEnvironment(), ['dev', 'test'], true)) { $bundles[] = new Symfony\Bundle\DebugBundle\DebugBundle(); $bundles[] = new Symfony\Bundle\WebProfilerBundle\WebProfilerBundle(); $bundles[] = new Sensio\Bundle\DistributionBundle\SensioDistributionBundle(); $bundles[] = new Sensio\Bundle\GeneratorBundle\SensioGeneratorBundle(); }
Стало:
if (in_array($this->getEnvironment(), ['dev', 'test'], true)) { $bundles[] = new Symfony\Bundle\DebugBundle\DebugBundle(); $bundles[] = new Symfony\Bundle\WebProfilerBundle\WebProfilerBundle(); $bundles[] = new Sensio\Bundle\DistributionBundle\SensioDistributionBundle(); $bundles[] = new Sensio\Bundle\GeneratorBundle\SensioGeneratorBundle(); if ('dev' === $this->getEnvironment()) { $bundles[] = new Symfony\Bundle\WebServerBundle\WebServerBundle(); } }
Теперь команды server будут работать в symfony 3.3+.
Выполнив в консоли снова bin/console
можно увидеть список всех доступных команд, включая server:
$ bin/console | grep serverserverserver:log Starts a log server that displays logs in real timeserver:run Runs a local web serverserver:start Starts a local web server in the backgroundserver:status Outputs the status of the local web server for the given addressserver:stop Stops the local web server that was started with the server:start command
if (class_exists('Symfony\Bundle\WebServerBundle\WebServerBundle')) { // For symfony below 3.3 the WebServerBundle does not exist and not needed $bundles[] = new Symfony\Bundle\WebServerBundle\WebServerBundle(); }
Но смысла в этом мало, ведь версия symfony явно указывается в composer.json.
Комментарии 0