Вывод сообщений
$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, а php код через apache. Однако если статика не находится с помощью nginx (что бывает из-за генерации Assets), в этом случае надо вместо 404 ошибки - пробовать направлять запрос в Apache.
В виртуальном хосте nginx прописываем:
server {
Существует несколько способов темизации страниц ошибок.
Способ 1 - переопределение шаблонов
Самый простой способ - создать в папке /app/Resources/TwigBundle/views/Exception/ файлы с именем error404.html.twig, error403.html.twig, error.html.twig и т.п. Теперь наши шаблоны будут срабатывать при вызове в контроллере:
throw $this->createNotFoundException('Page not found');
Подробнее тут.
mappedBy - указывается на обратной стороне (OneToMany)
inversedBy - указывается на владеющей стороне (ManyToOne)
В Twig имеется множество расширений, которые удобно использовать в шаблонах. Однако может возникнуть ситуация, когда будет необходимо написать собственное расширение. Например мы хотим отображать даты в формате: 2 дня назад, 3 месяца назад и т.п.
Пусть это расширение используется следующим образом:
{{ comment.created|created_ago }}
1. Сперва создадим файл для Twig расширения по адресу src/Acme/TestBundle/Twig/Extensions/AcmeTestExtension.php со следующим содержимым:
Это перевод оригинальной статьи «How to expose a Semantic Configuration for a Bundle» (Как влиять на семантические настройки бандла). В статье описаны способы конфигурации вашего бандла и его сервисов.
Иногда одна единственная идея способна изменить все представление о программировании. Для меня одной из такой идей была идея сервис-контейнера. Это как золотой грааль). Вообще-то, идея не сугубо 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');
Использование конфигураций