Статьи
В чем разница между 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 и удалив их, симфони автоматически создаст новые.
Этот метод подходит для небольших сайтов! Т.к. удаление может занять много времени!