Я создаю мобильную версию в проекте symfony, и я использую описанную здесь технику: http://symfony.com/blog/how-to-create-an-optimized-version-of-your-website-for-the -Iphone-в-Symfony-1-1
Пока это работает, но у меня есть одна проблема. Большинство моих стандартных страниц отлично подходят для просмотра с помощью мобильного телефона, но symfony заставляет меня создавать шаблоны * Success.mobile.php … Я бы хотел, чтобы symfony использовал нормальный шаблон, если он не находит .mobile.php один. Это возможно? Как бы вы решили?
Вы должны проверить перед рендерингом, если этот шаблон существует, а если нет, задайте шаблон по умолчанию. Это можно сделать, добавив фильтр, который проверяет это. Так…
Добавьте этот фильтр в папку lib /, например /lib/filters/ViewFilter.class.php
<!-- /lib/filters/ViewFilter.class.php --> class ViewFilter extends sfFilter{ public function execute($filterChain){ if ($this->isFirstCall()){ //get context $context = $this->getContext(); //get module name $module = $context->getModuleName(); //get action name $action = $context->getActionName(); //get template file name for this request $templateFile = $action . "Success.mobile.php"; //set physical path of that template $path = sfConfig::get('sf_app_module_dir').DIRECTORY_SEPARATOR.$module.DIRECTORY_SEPARATOR."templates".DIRECTORY_SEPARATOR. $templateFile; //check if exists if(!file_exists($path)) //if is not, set html format to render the {$action}Success.php $context->getRequest()->setRequestFormat('html'); } $filterChain->execute(); } }
Затем добавьте в свои фильтры.yml
<!-- /apps/frontend/config/filters.yml --> rendering: ~ security: ~ # insert your own filters here ViewFilter: class: ViewFilter cache: ~ execution: ~
И должен работать. Если вы не знаете, что такое фильтр, и что он делает, обратитесь к руководству по фильтрам Symfony, чтобы вы начали.