CakePHP如何路由/ error / 404到/ errors / error404

时间:2013-06-23 18:12:44

标签: cakephp routing

我想尝试美化我的网址,但我不确定如何设置路线以便:

/error/403转到/errors/error403

/error/404转到/errors/error404

/error/500转到/errors/error500

目前我有这个,但我不知道该去哪里。如何获取action参数并将其放入URL中,就像我使用.htaccess一样?

Router::connect('/error/:action/*', array('controller' => 'errors', 'action' => ??));

1 个答案:

答案 0 :(得分:0)

我看到两种做法(似乎我总是用这句话开始我的答案)。

首先是手工编写所有自定义网址

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*/
    }
}

两者都有效,但这取决于你的行动,如果他们处理更多参数,你会发现什么更漂亮......