我看到了两种方法(似乎我总是用这句话开始我的答案)。
首先是手动编写所有自定义网址
Router::connect('/error/404', array('controller' => 'errors', 'action' => 'error404'));
Router::connect('/error/500', array('controller' => 'errors', 'action' => 'error500'));
这看起来相当丑陋。但是你可以把它放在一个数组中来美化它。
$errorTypes = array('403', '404', '500')
foreach ($errorTypes as $error)
Router::connect('/error/'.$error, array('controller' => 'errors', 'action' => 'error'.$error));
或者,你可以做一些更像蛋糕的事情(我认为)
Router::connect('/error/:code',
array('controller' => 'errors', 'action' => 'generalError'),
array('pass' => array('code'),
'code' => '[0-9]+'));
这意味着您需要在 ErrorsController 中有一个新函数来接收代码并将其发送到不同的操作
class ErrorsController extends AppController {
public function generalError($code) {
if ($code == 404)
$this->error404();
else if ($code == 500)
$this->error500();
/*etc*/
}
}
两者都有效,但这取决于您的操作,如果它们处理更多参数,您觉得哪个更漂亮...