1

URL を少し美しくしようとしていますが、次のようにルートを設定する方法がわかりません。

/error/403に行く/errors/error403

/error/404に行く/errors/error404

/error/500に行く/errors/error500

現時点ではこれを持っていますが、どこに行くべきかわかりません。.htaccess の場合と同様に、アクション パラメータを取得して URL に挿入するにはどうすればよいですか?

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

1 に答える 1

0

これを行うには 2 つの方法があります (私はいつもこのフレーズで回答を開始しているようです)。

まず、すべてのカスタム 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));

または、もっとケーキっぽいこともできます(と思います)

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

どちらも機能しますが、それはあなたの行動に依存します。より多くのパラメーターを処理する場合、何がよりきれいだと思いますか...

于 2013-06-24T22:06:28.283 に答える