これを行うには 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*/
}
}
どちらも機能しますが、それはあなたの行動に依存します。より多くのパラメーターを処理する場合、何がよりきれいだと思いますか...