此问题与我的旧帖子Dealing with Alias URLs in CakePHP
略有关联经过深思熟虑后,我正在探索在我的Cake App中使用自定义404脚本的选项,当URL未映射到任何控制器/操作时,就会达到该脚本。这个脚本会在这里检查$ this->并在重定向数据库中查找。如果找到匹配项,它将跟踪特定的“促销”代码并重定向。
我正在考虑状态代码。我可以根据特定条件使脚本返回合适的状态代码吗?例如:
我可以这样做吗?
编辑:
这个怎么样?有人看到任何问题吗?我把它放在app_controller中。
function appError($method, $params) {
//do clever stuff here
}
答案 0 :(得分:6)
这应该有效。假设您在LegacyUrls :: map()控制器操作中重定向404。代码需要存储在app / app_error.php中:
<?php
class AppError extends ErrorHandler{
function error404($params) {
$Dispatcher = new Dispatcher();
$Dispatcher->dispatch('/legacy_urls/map', array('broken-url' => '/'.$params['url']));
exit;
}
function missingController($params) {
$Dispatcher = new Dispatcher();
$Dispatcher->dispatch('/legacy_urls/map', array('broken-url' => '/'.$params['url']));
exit;
}
}
?>
祝你好运!
答案 1 :(得分:4)
我一直在创建 app \ views \ errors \ missing_action.ctp 和 app \ views \ errors \ missing_controller.ctp
当网址没有映射到控制器或其方法时,Cake会自动显示其中一个视图。
除非您没有给出错误代码 ,否则这将完美无缺!
答案 2 :(得分:0)
我想补充felixge的答案。
此版本向浏览器输出404错误:
class AppError extends ErrorHandler
{
function _outputMessage($template)
{
if ($template === 'error404') {
$Dispatcher = new Dispatcher();
$Dispatcher->dispatch('legacy_urls/map', array('broken-url' => '/'.$params['url']));
return;
}
parent::_outputMessage($template);
}
}