Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
CakePHP如何将/error/404路由到/errors/error404_Cakephp_Routing - Fatal编程技术网

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

CakePHP如何将/error/404路由到/errors/error404,cakephp,routing,Cakephp,Routing,我正在尝试美化我的URL,但我不确定如何设置路由,以便: /error/403转到/errors/error403 /error/404转到/errors/error404 /error/500转到/errors/error500 等等 目前我有这个,但我不知道去哪里。如何像使用.htaccess一样获取操作参数并将其放入URL Router::connect('/error/:action/*', array('controller' => 'errors', 'action' =>

我正在尝试美化我的URL,但我不确定如何设置路由,以便:

/error/403
转到
/errors/error403

/error/404
转到
/errors/error404

/error/500
转到
/errors/error500

等等

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

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

我认为有两种方法可以做到这一点(似乎我总是从这个短语开始回答)

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

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));
或者,你可以做一些更像蛋糕的事情(我想)

这意味着您需要ErrorsController中的一个新函数来接收代码并将其发送到不同的操作

class ErrorsController extends AppController {
    public function generalError($code) {
       if ($code == 404)
          $this->error404();
       else if ($code == 500)
          $this->error500();
       /*etc*/
    }
}
这两种方法都有效,但这取决于你的行动,如果它们处理更多的参数,你会发现什么更漂亮

class ErrorsController extends AppController {
    public function generalError($code) {
       if ($code == 404)
          $this->error404();
       else if ($code == 500)
          $this->error500();
       /*etc*/
    }
}