更新
我在几个应用程序中使用共享的CakePHP库(所有应用程序都存在于子域中)。它们并非全都嵌套;所以,例如,在我可能有的文件系统上:
/foo
.htaccess
/1.0 (app)
/1.1 (app)
/1.2 (app)
...
/bar
.htaccess
/1.0 (app)
/1.1 (app)
/1.2 (app)
...
其中每个.htaccess只定义哪个应用程序是请求被路由到该子文件夹的默认应用程序,而所有这些应用程序仍然可以通过直接URL(例如/foo/1.0/...
)获得。
似乎如果我使用直接URL(例如不是.htaccess重写的),它会正确识别路由,但如果URL由.htaccess重写,则不会;它将使用问题末尾的输出调用AppError :: error404()。这对我来说似乎不对......如果有人有任何见解,那就太棒了。
嘿伙计们,
我正在使用CakePHP 1.3并遇到路由问题。这个概念的要点是:
views/:i18n/...
),而其他语言则显示调用__()
的常见视图所以,我设置的路线如下:
$sI18nFormat = '/[a-z]{2}_[a-z]{2}/';
Router::connect('/:i18n/:controller/:action',
array('controller' => ':controller', 'action' => ':action', 'i18n' => ':i18n'),
array('i18n' => $sI18nFormat));
Router::connect('/:i18n/:controller',
array('controller' => ':controller', 'action' => 'index', 'i18n' => ':i18n'),
array('i18n' => $sI18nFormat));
Router::connect('/:controller/:action',
array('controller' => ':controller', 'action' => ':action', 'i18n' => 'en_us'),
array('i18n' => $sI18nFormat));
Router::connect('/:controller',
array('controller' => ':controller', 'action' => 'index', 'i18n' => 'en_us'),
array('i18n' => $sI18nFormat));
显然路由是镜像的,除了一个传递了动态i18n
参数,另一个具有静态参数。
问题来自于使用:i18n
的某些值 - 例如,en_us
没问题,但fr_fr
似乎有Cake正在寻找FrController
(不是{{1} }) - 似乎是因为它试图使用内置的i18n FrFrController
前缀来处理一些魔法。
举个例子,这里给出的是fr
:
AppError::error404
是否有可能a)让Cake停止这个让我的路线按预期工作,或者b)告诉Cake我想要我的i18n / i10n的格式,所以它不会尝试以自己的方式做到这一点?
任何想法都会受到赞赏。
答案 0 :(得分:1)
您不应该(需要)划分正则表达式,也不需要填充默认参数。试试这个:
$sI18nFormat = '[a-z]{2}_[a-z]{2}';
Router::connect('/:i18n/:controller/:action', array(), array('i18n' => $sI18nFormat));
它可能也失败了,因为URL与完整定义的路由不匹配。即,/fr_fr/foo
与上述路线不匹配,因为它不包含:action
。尝试添加更短的变体:
Router::connect('/:i18n/:controller', array('action' => 'index'), array('i18n' => $sI18nFormat));
Router::connect('/:i18n', array('controller' => 'foo', 'action' => 'index'), array('i18n' => $sI18nFormat));
答案 1 :(得分:1)