Symfony 2.7 включает в себя бесчисленные хитрости кода и улучшения .Большинство из них, это незначительные изменения, которые помогут повысить вашу ежедневную продуктивность. В этой статье мы рассмотрим семь таких небольших, но приятных особенностей.
Добавлена ссылка на метод getParameter() в базовый контроллер
Получение значения параметра контейнера внутри контроллера является одним из наиболее распространенных затруднений, в процессе обучения Symfony. Как правило, вначале пытаются безуспешно использовать метод get()
, а затем пытаются использовать несуществующий метод getParameter()
. К счастью, в Symfony 2.7 будет добавлена ссылка на метод getParameter():
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
class DefaultController extends Controller
{
public function indexAction()
{
// Symfony 2.6
$value = $this->container->getParameter('param_name');
// Symfony 2.7
$value = $this->getParameter('param_name');
// ...
}
}
Добавлен индикатор статуса версии Symfony
Кто захочет работать с устаревшей версией Symfony, если с каждой новой версией, становятся доступными все больше новых, полезных фич? К счастью, начиная с Symfony 2.7, будет сложнее запустить устаревшую версию.Причина в том, что панель отладки будет включать в себя визуальный индикатор статуса вашей версии Symfony:
Отображение статуса HTTP запроса в результатах поиска в профайлере
Часто тяжело найти информацию по конкретному запросу в списке запросов в профайлере Symfony. В Symfony 2.7 это задача упрощается благодаря новой колонки, который отображает HTTP статус каждого запроса.
Пожалуйста, обратите внимание, что если вы храните информацию о профиле в базе данных типа MySQL или SQLite, необходимо удалить существующую таблицу или добавить новый столбец status_code вручную.
Добавлена поддержка параметров контейнера в правилах роутинга
В Symfony 2.7, правила роутинга теперь поддерживает использование параметров контейнера на своих выражениях. Просто оберните названия параметров со символами % и Symfony будет заменять их значениями перед вычислением выражения:
# app/config/routing.yml
contact:
path: /contact
defaults: { _controller: AcmeDemoBundle:Main:contact }
condition: "request.headers.get('User-Agent') matches '%allowed_user_agents%'"
Пожалуйста, обратите внимание, что это изменение вводит небольшую путаницу в некоторых особых случаях. Если ваше выражение использует оператора следующего вида: foo%bar%2
, то Symfony 2.6 будет анализировать его как $foo % $bar % 2
, а Symfony 2.7 заменит %bar%
значением параметра bar
или вернет ошибку если такой параметр не существует.
Перемещены команды lint в пространство имен lint:
В прошлом мы перенесли все Symfony команды отладки в пространство имён debug, чтобы лучше сгруппировать команды по функционалу. Symfony 2.7 сделано то же самое с командами lint, используемыми для обнаружения ошибок синтаксиса в YAML-файлах и шаблонах Twig:
# Symfony 2.6
$ php app/console yaml:lint ...
$ php app/console twig:lint ...
# Symfony 2.7 (the old command names also work)
$ php app/console lint:yaml ...
$ php app/console lint:twig ...
Это может показаться незначительным изменением, но группировка команд отладки, и lint команд, делает фреймворк более последовательным, а это всегда хорошо.
Добавить поддержку для включения нескольких шаблонов Twig
В Symfony 2.7 вы можете передать любое количество файлов и/или каталогов lint:twig
команду:
# Symfony 2.6 (one template or one directory)
$ php app/console lint:twig app/Resources/views/base.html.twig
1/1 valid files
$ php app/console lint:twig app/Resources/views/blog/
4/4 valid files
# Symfony 2.7 (any number of files and/or directories)
$ php app/console lint:twig app/Resources/views/base.html.twig app/Resources/views/blog/
5/5 valid files
Автоматическая перезагрузка встроенного веб-сервера
Использование встроенного PHP веб-сервера, довольно частая практика при разработке приложений. Вы, вероятно, используете команду server:run
доступную с версии Symfony 2.2. Однако, начиная с Symfony 2.6 вы также можете использовать команды server:start
, server:status
и server:stop
.
Единственным недостатком является то, что команда server:start
требует расширения pcntl для запуска. В Symfony 2.7, если вы выполняете server:start
, и у вас не установлено расширение pcntl, Symfony будет автоматически выполнять команду server:run
.
Источник http://symfony.com/blog/new-in-symfony-2-7-productivity-improvements