如果該模板存在,則必須在渲染前檢查,如果不存在,請設置默認模板。這可以通過添加一個檢查過濾器來完成。所以......
這個過濾器添加到一個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();
}
}
然後添加到您的filters.yml
<!-- /apps/frontend/config/filters.yml -->
rendering: ~
security: ~
# insert your own filters here
ViewFilter:
class: ViewFilter
cache: ~
execution: ~
並且應該正在工作:) 如果您不知道什麼是過濾器以及它的功能,請參閱Symfony's Filters Guide以幫助您入門。
我正在考慮向操作添加代碼;這太好了! – Nathan 2011-03-31 23:57:16
這看起來不錯。我會稍後檢查它是否有效:) – miguelSantirso 2011-04-01 07:06:51
它適合你嗎? – Pabloks 2011-06-23 18:46:16