【问题标题】:CakePHP how to route /error/404 to /errors/error404CakePHP 如何将 /error/404 路由到 /errors/error404
【发布时间】:2013-06-23 18:12:44
【问题描述】:

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

/error/403 转到/errors/error403

/error/404 转到/errors/error404

/error/500 转到/errors/error500

等等

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

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

【问题讨论】:

    标签: cakephp routing


    【解决方案1】:

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

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

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

    两者都有效,但这取决于您的操作,如果它们处理更多参数,您觉得哪个更漂亮...

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-05-08
      • 2023-03-14
      • 2014-11-24
      • 2019-09-01
      • 1970-01-01
      • 2021-02-13
      • 2021-01-26
      • 2011-07-23
      相关资源
      最近更新 更多