Symfony

Работа с консолью

Вывод сообщений

$output->writeln('Message');
$output->writeln('<error>This error</error>');

 

Ввод данных

$dialog = $this->getHelper('dialog');
$validator = function ($value) {
    // Проверка $value
    return $value;
};
$ask = $dialog->askAndValidate($output, 'Enter your name: ', $validator);
// Обработка ответа на вопрос $ask

Другие варианты ввода

Конфигурация сервера nginx + apache под Symfony 2

Рассмотрим, как настроить на сервере связку nginx (фронтенд) + apache (бекенд) для корректной работы Symfony 2 с её функциональностью ассетов и пр. Основная идея в том, чтобы статика отдавалась через nginx, а php код через apache. Однако если статика не находится с помощью nginx (что бывает из-за генерации Assets), в этом случае надо вместо 404 ошибки - пробовать направлять запрос в Apache.

В виртуальном хосте nginx прописываем:

server {

Свой вывод страниц ошибок 403, 404 и т.п.

Существует несколько способов темизации страниц ошибок.

Способ 1 - переопределение шаблонов

Самый простой способ - создать в папке /app/Resources/TwigBundle/views/Exception/ файлы с именем error404.html.twig, error403.html.twig, error.html.twig и т.п. Теперь наши шаблоны будут срабатывать при вызове в контроллере:

throw $this->createNotFoundException('Page not found');

Подробнее тут.

 

Создание своего расширения для Twig

В Twig имеется множество расширений, которые удобно использовать в шаблонах. Однако может возникнуть ситуация, когда будет необходимо написать собственное расширение. Например мы хотим отображать даты в формате: 2 дня назад, 3 месяца назад и т.п.

Пусть это расширение используется следующим образом:

{{ comment.created|created_ago }}

1. Сперва создадим файл для Twig расширения по адресу src/Acme/TestBundle/Twig/Extensions/AcmeTestExtension.php со следующим содержимым:

Конфигурация бандла через Extension класс

Это перевод оригинальной статьи «How to expose a Semantic Configuration for a Bundle» (Как влиять на семантические настройки бандла). В статье описаны способы конфигурации вашего бандла и его сервисов.

Service Container and Dependency Injection in Symfony framework

Иногда одна единственная идея способна изменить все представление о программировании. Для меня одной из такой идей была идея сервис-контейнера. Это как золотой грааль). Вообще-то, идея не сугубо Symfony framework, это просто один из удачных паттернов проектирования приложений, часто используемый в Symfony.

Наследование бандлов

У Symfony framework  интересная системанаследования бандлов (bundle). Интересная она тем, что действует как ООП наследование с точностью до наоборот. При наследовании бандла модификации задевают родительский.

Ядро контроллеров

На каждом сайте существует множество блоков (меню, погода, новости...), чтобы не использовать SonataBlockBundle, не подключать контроллеры в каждом шаблоне - создаем ядро контроллеров

Создадим бандл AcmeDemoBundle, теперь добавим ядро контроллеров (Acme/DemoBundle/Controller/CoreController.php)

Использование параметров и конфигураций

Использование параметров

Параметры задаются в отдельном файле app/config/parameters.yml (также можно и в app/config/config.yml), назначим параметр site_name:

parameters:
    site_name: "Название сайта"

Далее выведем его в контроллере:

echo $this->container->getParameter('site_name');

 

Использование конфигураций

Подписка на RSS - Symfony