Статьи

В чем разница между redirect и forward в Symfony

В некоторых случаях выполнение action заканчивается вызовом другого action. Например, action выполняющий обработку POST запроса, обычно редиректит(redirect) в другой action после сохранения данных в базу. Другой пример - подмена action, обычно используется в index actions, когда надо вывести список элементов, здесь происходит перенаправление в list action (forward). Базовый класс sfActions поддерживает два метода, чтобы перенаправить приложение в другое русло: Если action перенаправляет вызов в другой action:

$this->forward('otherModule', 'index');

Объект роутинга в компонентах

Объект роутинга в компонентах

# apps/frontend/modules/module/actions/components.class.php
 
class modulenameComponents extends sfComponents
{
 
  public function executeAction(sfWebRequest $request)
  {
    
    $object = $this->getContext()->getController()
      ->getAction($this->getModuleName(), $request->getParameter('action'))
      ->getRoute()->getObject();
  } 
}

Выбор года из списка

Выбор даты года из списка. В years задается диапазаон дат.

$years = range(date('Y') - 110, date('Y'));
'founded' => new sfWidgetFormDate(array('format' => '%year%', 'years' => $years)),

Регистр в объявлении action`а в roting.yml

Недавно столкнулись с проблемой в тесте. В тесте с помощью sfBrowser (sfTestFunctional) запрашивали страничку, используя роут:

url_for('@cart_clear');

роут был объявлен следующим образом routing.yml:

cart_clear:
  url: /cart/clear
  params: {module: cart, action: clearcart}

Хостинг под symfony

Че то не задавался таким вопросом раньше, сейчас решил рассмотреть этот вопрос. На своих проектах я стараюсь не использовать хостинг как таковой, а брать VDS/VPS и его настраивать под задачу. Что нам нужно, чтобы сайт на симфони нормально функционировал?

сортировка в object_select_tag propel

Часто приходится выводить выпадающий список с object_select_tag, но сортировать по произвольному полю в базе. Пример использования object_select_tag

echo object_select_tag($domain, 'getObjectId', array (
'related_class' => 'Object',
'peer_method' => 'getSortedObject',
'control_name' => 'object_id',
'include_blank' => true,
)); 

Изменение прав (credentials) пользователя без релогина используя sfDoctrineGuardPlugin

Регистрируясь в нашей системе пользователь должен подтвердить свой email. Как только пользователь подтверждает свой email его с чистой совестью можно добавить в группу «client» и разрешить использовать все возможности нашей системы не требуя перелогиниться. И вот вчера, решая эту простую задачу я столкнулся с очень любопытным явлением, о котором я бы хотел рассказать.

Интернализация заголовков (title)

При создании мультиязычного приложения, обязательно, сталкиваешься с проблемой перевода, не только контента, но и всего интерфейса приложения, включая и заголовки. Рассмотрим, несколько способов перевода:

symfony task doctrine:custom-build-sql

Нашел небольшой класс для генерации sql файла для моделей sfDoctrineCustomBuildSqlTask.class.php

Очиска кеша через веб

Небольшой кодес, который, поможет вам не удалять файлы вручную, а использовать веб=)

require_once(dirname(__FILE__).'/../../config/ProjectConfiguration.class.php');

$configuration = ProjectConfiguration::getApplicationConfiguration('backend', 'prod', false);
sfContext::createInstance($configuration);

chdir(sfConfig::get('sf_root_dir'));  
$task = new sfCacheClearTask(sfContext::getInstance()->getEventDispatcher(), new sfFormatter());

$arguments = array();

$options = array('env' => 'prod');
$task->run($arguments, $options);

Соответсветственно, указывается режим dev/prod

url_for в action

Для того чтобы сгенерировать ссылку в экшене:

$this->getController()->genUrl('action/method?key=value');

Или подключить хелпер Url

Upload файлов в симфони

Есть два способа загрузки файлов, первый через форму, а второй такой:

Убираем все действия в admin generator

      list:    
        title:             Список чего то
        batch_actions:     {}   
        object_actions:    {}    
        actions:           {}

Проверка Email c помощью sfValidatorEmail

Иногда необходимо использовать валидатор отдельно от формы

$dirtyValue = "broken.email.address"
$v = new sfValidatorEmail();
try{
  $v->clean($dirtyValue);
}
catch (sfValidatorError $e){
  // Validation failed
}

symfony tip: очистка кеша без командной строки

Часто на форумах, если что то не работает, то пишут

Please, try to clear the cache! (очистите кеш)

Но, что делать если нет доступа к командам типа symfony clear-cache или symfony cc Тогда очистить кеш можно удалив файлы кеш через FTP. Файлы приложения лежат в папке cache и удалив их, симфони автоматически создаст новые.

Этот метод подходит для небольших сайтов! Т.к. удаление может занять много времени!