【发布时间】:2019-08-23 17:30:25
【问题描述】:
我认为这是一个晦涩难懂的问题。我已经成功地为我的所有路由规则设置了语言前缀来处理本地化。当用户请求应用程序中存在的控制器时,一切都很好(例如,/users/view/4)。在我的 AppController 中,我让应用程序成功地将任何缺少语言前缀的请求重定向到具有语言前缀的 URL(例如,/eng/users/view/4)。
当用户请求无效的控制器时,就会出现问题。在这种情况下,在重定向用户之后,应用程序会抛出 MissingControllerException(它应该),但它报告为无效的控制器是语言前缀本身(例如,“EngController”),而不是请求 URI 中此之后的控制器.
这表明在错误状态下,Cake 应用程序不再知道任何语言前缀路由。这表明我需要向 routes.php 添加另一个路由规则,该规则将仅针对无效请求,并确保在 CakeErrorController 处理的任何请求中都需要语言前缀(这是接管这些类型的核心控制器)例外)。
但是我已经搜索了文档,但我不知道如何制作这样的路线。感谢您的帮助!
这是我的 routes.php 文件:
<?php
$lang_settings = ['language' => '[a-z]{3}'];
// ElStats homepage vs tenant homepage
if(!TENANT) {
Router::connect('/', ['controller' => 'pages', 'action' => 'index'], $lang_settings);
Router::connect('/:language', ['controller' => 'pages', 'action' => 'index'], $lang_settings);
} else {
Router::connect('/', ['controller' => 'pages', 'action' => 'index'], $lang_settings);
Router::connect('/:language', ['controller' => 'pages', 'action' => 'index'], $lang_settings);
}
/**
* ...and connect the rest of 'Pages' controller's urls.
*/
Router::connect('/:language/pages/*', ['controller' => 'pages', 'action' => 'display'], $lang_settings);
Router::connect('/:language/contests/search/*', ['controller' => 'contests', 'action' => 'index'], $lang_settings);
Router::connect('/:language/contests/:action/*', ['controller'=>'contests'], $lang_settings);
Router::connect('/:language/contests/*', ['controller' => 'contests', 'action' => 'index'], $lang_settings);
Router::connect('/:language/candidates/search/*', ['controller' => 'candidates', 'action' => 'index'], $lang_settings);
Router::connect('/:language/candidates/:action/*', ['controller'=>'candidates'], $lang_settings);
Router::connect('/:language/candidates/*', ['controller' => 'candidates', 'action' => 'index'], $lang_settings);
// If just /search, then default to /contests/search
Router::connect('/:language/search/*', ['controller' => 'contests', 'action' => 'index'], $lang_settings);
/**
* Full-controller alias routing
*/
// ballot_questions => contests
Router::connect('/:language/ballot_questions/search/*', ['controller' => 'contests', 'action' => 'index'], $lang_settings);
Router::connect('/:language/ballot_questions/:action/*', ['controller'=>'contests'], $lang_settings);
Router::connect('/:language/ballot_questions/*', ['controller'=>'contests', 'action' => 'index'], $lang_settings);
Router::connect('/:language/admin/ballot_questions/:action/*', ['controller'=>'contests','admin' => true], $lang_settings);
Router::connect('/:language/admin/ballot_questions/*', ['controller'=>'contests', 'action' => 'index', 'admin' => true], $lang_settings);
// Admin Routing
Router::connect('/:language/admin', [ 'controller'=> 'pages', 'action'=> 'index','admin' => true], $lang_settings);
Router::connect('/:language/admin/:controller/:action/*',['admin' => true], $lang_settings);
Router::connect('/:language/admin/:controller/*',['admin' => true], $lang_settings);
Router::connect('/:language/:controller/:action/*',[], $lang_settings);
require CAKE . 'Config' . DS . 'routes.php';
【问题讨论】:
-
你能用你的 routes.php 文件更新你的问题吗?
标签: php exception cakephp routing cakephp-2.x