0

ロード時にURLリクエストのパラメータを変更する方法はありますか?

私のルートは基本的にURLの言語をチェックしますhttp://localhost/<language>/<controller>

ただし、問題は、言語パラメータにランダムなテキストが挿入されると、デフォルトのテキストが読み込まれ、翻訳ファイルの設定方法で次のようなものが出力されることです。menu.home

とにかく、コントローラーがデフォルト言語のURLにリダイレクトすることはありますか?たとえば、http://localhost/fakeLanguage/homeにリダイレクトしhttp://localhost/en/home、にhttp://localhost/fakeLanguage/aboutリダイレクトしますhttp://localhost/en/about

4

2 に答える 2

1

ルートは、次のように正規表現でセグメントをフィルタリングする必要があります。

// load available language names from config
$langs = Kohana::$config->load('lang.available');
Route::set('lang_route', '<language>/<controller>', array('language' => '('.implode('|', $langs).')'))
    ->defaults(...);

または、ルートセグメント値を簡単に変更できるルートフィルターを使用します。

于 2012-11-09T08:24:26.440 に答える
0

これは1つの可能な解決策の大まかなアイデアにすぎませんが、サポートされているすべての言語の配列を定義することを検討することをお勧めします。このようなもの:

<?php
/*
    Part 1 - Create an array of all the known languages. Consider making this part of the application configuration file.
*/
$languages = array(
    "en",
    "ge",
    "pirate"
);
?>

次に、コントローラーファイル内のそのアレイと照合します。おそらく、コントローラーのbeforeメソッドを使用します。

<?php
/*
    Part 2 - In the controller file add a before method that checks to see if the requested language exists.
*/
public function before(){
    if(!in_array($this->request->param('langauge'),$languages)):
        // If the language is unknown perform a redirect.
        url::redirect('DEFAULT_LANGUAGE_URL');
    endif;
}
?>

上記のURL構造の最初のセグメントの変換は、次のようなコードで実行できます。

<?php
    // Get the current URI
    $url = $this->request->detect_uri();

    // Get the query string
    // Note: If you aren't interested in preserving the query string this next line can be removed.
    if($_SERVER['QUERY_STRING'] != '') $url .= '?'.$_SERVER['QUERY_STRING'];

    // Set the default language. Consider setting this in your application configuration file instead.
    $defaultLanguage = 'pirate';

    // Replace the first URI segment with the default language.
    $redirectURL = preg_replace("/^\/.*?(\/.*)$/",("/{$defaultLanguage}$1"),$url,1);
?>
于 2012-11-05T03:53:49.757 に答える