【问题标题】:Kohana Route Issue To Base URLKohana 路由问题到基本 URL
【发布时间】:2013-07-22 18:09:55
【问题描述】:

我正在使用 Kohana 3.3

目标

我想让我的应用程序根据 URL 中的语言选择正确的视图文件。比如:

mydomain.com/es/foobar 会在我的 Foobar 控制器中加载西班牙语视图文件。这适用于除基本 URL 之外的任何内容。现在,如果您转到 mydomain.com/es/mydomain.com/en/,我会收到 404 回复。我想让它路由到/classes/Controller/Index.php 的索引控制器我不确定我在这里缺少什么。任何指针将不胜感激。

注意:

mydomain.com 正确定向到英文页面。

如有必要,我可以发布一些控制器代码,但我相当肯定这只是一个路由问题。

当前路线

/*I don't think this one is even getting fired even though it's first */
Route::set('mydomain_home', '(<lang>/)',
array(
    'lang' => '(en|es)'
))
->filter(function($route, $params, $request)
{   
    $lang = is_empty($params['lang']) ? 'en' : $params['lang'];
    /*This debug statement is not printing*/
    echo Debug::vars('Language in route filter: '.$lang);
    $params['controller'] = $lang.'_Index';
    return $params; // Returning an array will replace the parameters
})
->defaults(array(
    'controller' => 'Index',
    'action' => 'index',
    'lang' => 'en',
));;

/*This one works for the non-base URL e.g. mydomain.com/es/page1 */
Route::set('mydomain_default', '(<lang>/)(<controller>(/<action>(/<subfolder>)))',
array(
    'lang' => '(en|es)',
))
->filter(function($route, $params, $request) {
        // Replacing the hyphens for underscores.
        $params['action'] = str_replace('-', '_', $params['action']);
        return $params; // Returning an array will replace the parameters.
})
->defaults(array(
    'controller' => 'Index',
    'action' => 'index',
    'lang' => 'en',
));

【问题讨论】:

  • 你不能在 I18n 模块中使用 kohanas 构建吗?为不同的语言使用不同的视图文件是不可能维护的。 kohanaframework.org/3.3/guide-api/I18n
  • 您是否为不同的语言使用不同的控制器???如果我是你,我会认真考虑其他事情。控制器中甚至不应该有任何输出,因此永远不必本地化。
  • @AmazingDreams 使用单独的视图文件与使用 I18N 没有什么不同。每当有任何变化时,我都必须去寻找那组特定的文本并进行更改。我还计划在网站的特定语言版本之间区分 HTML 结构,所以这是有道理的。你对我的实际问题有什么要补充的吗?

标签: php kohana kohana-3 kohana-3.3


【解决方案1】:

我复制了您的问题并使用了您的路线。在修改它们之后,我得出的结论是两条路线会更容易。一个用于普通 URL,一个用于语言路由。

以下是我制作的路线:

Route::set('language_default', '(<lang>(/<controller>(/<action>(/<subfolder>))))',
array(
    'lang' => '(en|es)',
))
->filter(function($route, $params, $request) {
    // Replacing the hyphens for underscores.
    $params['action'] = str_replace('-', '_', $params['action']);
    return $params; // Returning an array will replace the parameters.
})
->defaults(array(
    'controller' => 'Index',
    'action' => 'index',
    'lang' => 'en',
));


Route::set('default', '(<controller>(/<action>(/<subfolder>)))')
->filter(function($route, $params, $request) {
    // Replacing the hyphens for underscores.
    $params['action'] = str_replace('-', '_', $params['action']);
    return $params; // Returning an array will replace the parameters.
})
->defaults(array(
    'controller' => 'Index',
    'action' => 'index',
    'lang' => 'en',
));

【讨论】:

  • 不幸的是,如果我输入mydomain.com/es/,那仍然无法正常工作。
  • 嗯...奇怪它对我有用。另请注意,我没有使用与您相同的控制器。我现在已经改变了。
  • 是的,我注意到了。我会在几分钟后再试一次,以确认没有其他时髦的事情发生。谢谢!
  • 是的,我有一个错字。很抱歉让您质疑您的代码。我应该更加小心。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多