Symfony2: аналог preExecute() для контроллера

Я думаю многих смущает отсутствие preExecute в стандартном контроллере Symfony2. Ниже я приведу возможное решение данного вопроса при помощи внедрения зависимости через Service Container (Оригинал подсмотрен у Szymon Szewczyk).

UPDATE 20 января 2012: статья обновлена в соответствии с современными реалиями SF 2.0.9 (фактически изменения коснулись именования тага и события)

Continue reading

Symfony2: выборка случайной записи при помощи Doctrine2 Repository

Я уже рассматривал в одной из прошлых статей случайные выборки (см.). Сейчас мы самым простым способом интегрируем получение случайной записи в Symfony2 проект при помощи Doctrine2 Repository.

Continue reading

Symfony: прячем фильтры в админ-генераторе

Фильтры в админ-генераторе штука хорошая, но всегда думаешь куда бы их пристроить на странице. Если полей в модели больше чем 3-5 это становится проблемой. Предлагаю вашему вниманию небольшой трюк по этому поводу. Нам потребуется JQuery, любимый редактор и немного терпения:

Continue reading

Symfony без слэша на хвосте

Часто-часто задаваемый вопрос в канале по symfony:

  • как избавиться от слэша на конце URL
  • почему DoctrineRouteCollection не принимает последний слэш
  • и т.д. в том же духе

Так вот вам просто сниппет в помощь:

#to avoid trailing slash problem
RewriteRule ^(.+)/$ http://%{HTTP_HOST}/$1 [R=301,L]

Научной ценности сниппет не представляет, но вопрос действительно часто спрашиваемый ) Так что “ищите и обрящете” ))

Have fun!

Сниппет: загружаем переменные app.yml из CLI task в symfony

В ходе обсуждения в русскоязычном чате пользователей symfony возник вопрос о загрузке конфигурационных констант из app.yml в контексте CLI таска. Как правило, с теми классами, которые работают из-под приложения (frontend, backend или что там у вас), проблем не возникает. Не зависимо от того на каком уровне расположен app.yml, к нему можно получить доступ стандартными средствами через sfConfig::get().

В тасках же конфигурация уровня приложения не инициализируется, поэтому sfConfig::get('app_some_param') будет возвращать NULL. Немного покопавшись в API родился такой сниппет-скелетон таска: Continue reading

Unescape для User flash message в symfony

Эскейпинг это конечно хорошо, но иногда надо таки вывести что-то без него. Ранее уже описывался способ вывода неэкранированных данных, но как выяснилось, для flash сообщений он не работает.

Рабочий вариант у меня получился таким:

<?php echo sfOutputEscaper::unescape( $sf_user->getFlash('notice') ) ?>

Используется такой вариант для вывода HTML кода в сообщении (например, чтобы быстро перейти куда-либо прямо из flash-сообщения).

Сниппет: инициализация character_set и collation для Doctrine в Symfony

Для того чтобы Doctrine создавал таблицы в базе данных с правильным набором символов и collation (например utf8 и utf8_general_ci, а не latin1, используемый mysql по умолчанию (например)) необходимо выполнить простую инициализацию:

// config/ProjectConfiguration.class.php:
public function configureDoctrine(Doctrine_Manager $manager)
{
  $manager->setCharset( 'utf8' );
  $manager->setCollate( 'utf8_unicode_ci' );
}

Спасибо Андрэю Дзягелю из русскоговорящего symfony-коммьюнити )