0

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',
));
4

1 に答える 1

1

私はあなたの問題を再現し、あなたのルートを使用しました。それらを変更した後、2 つのルートの方が簡単であるという結論に達しました。1 つは通常の URL 用で、もう 1 つは言語ルート用です。

以下は私が作ったルートです:

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',
));
于 2013-07-23T13:43:04.960 に答える