0

この記事 でソリューションを実装しました。

" beforeFilter" と " _setLanguage" は正常に動作します。URL に言語パラメーターがある場合、Cookie/セッション変数を正常に設定できます。そして、コントローラー間で使用します。

そのソリューションには、にurl()機能を追加することも含まれAppHelperます。

class AppHelper extends Helper {
   function url($url = null, $full = false) {
        if(!isset($url['language']) && isset($this->params['language'])) {
          $url['language'] = $this->params['language'];
        }
        return parent::url($url, $full);
   }
}

しかし、View ファイルには、.xml を使用せずに記述された多くの URL がありますHtmlHelper。このような:

// myfile.ctp
<a href="/mypage/">click me plase<a>

したがって、AppHelper::url ソリューションでは問題が解決しないようです。URL に言語プレフィックスを追加するより良い代替手段は何ですか?

次のようにグローバル変数を定義することを考えました:

// AppController::_beforeFilter()
if ($this->request->params['language'] != "")
{
   Configure::write('URLprefix', '/'.$this->request->params['language']);
} else {
   Configure::write('URLprefix', '');
}

次に、ビュー ファイルを次のように変更します。

// myfile.ctp
<a href="<?php echo URLprefix; ?>/mypage/">click me plase<a>

しかし、それは良い方法ではないようです。URL にプレフィックスを追加するより良い方法はありますか。または、すべてのリンクに手動で追加する必要がありますか?

関連:
CakePHP のすべての URL にプレフィックスを追加する
CakePHP 2.x i18n ルート
CakePHP 2.1 URL 言語パラメーター

4

1 に答える 1

1

HtmlHelper::link()およびを使用して、アプリケーション内のすべてのリンクと URL を生成する必要があります。HtmlHelper::url()

これにより、URL を生成するときにルートが考慮されるようになります (リバース ルーティング) 。

たとえば、 に「わかりやすい」URL ルートを定義する場合は、/logout次のよう/users/logoutになります。

echo $this->Html->link('Log out', array(
    'controller' => 'users', 
    'action' => 'logout'
));

このリンクを作成します:

<a href='/logout'>Log out</a>

後で/sign-outログアウト URL の「わかりやすい」URL ルート ( ) を変更すると、アプリケーション内のすべてのリンクが自動的に調整されます。

HtmlHelper への同じ呼び出しで、次のように出力されます。

<a href='/sign-out'>Log out</a>

このテーマの詳細については、こちらをご覧ください:

逆ルーティング

于 2013-04-04T21:25:24.723 に答える