あなたの質問は、デスクトップ版とモバイル版が必要なサイトとよく似ています。そのために使用されるソリューションを調査できます。
beforeFilter() メソッドで変数を設定する AppController を作成して (この場合はリクエスト ドメインを確認してください)、この変数を render メソッドで使用して、使用するレイアウト ファイルとビュー ファイルを選択することで、このようなものを作成しました。
function render($action = null, $layout = null, $file = null) {
$view_file = false;
$layout_file = false;
// test for availability of layout does not work for null so set to default setting of null.
if ($layout === null) {
$layout = $this->layout;
}
// if not mobile: show desktop version.
if (!$this->is_mobile) {
$view_file = file_exists(VIEWS . $this -> name . DS . 'desktop/' . $file . '.ctp');
$layout_file = file_exists(LAYOUTS . 'desktop/' . $layout . '.ctp');
}
return parent::render($action, ($layout_file ? 'desktop/' : '') . $layout, ($view_file ? 'desktop/' : '') . $file);
}
このように、is_mobile が false の場合、サブディレクトリ 'desktop' のビュー/レイアウトがデフォルトのものではなく使用されました。同じシステムを使用して、2 つのドメインに別々のビュー/レイアウトを作成できます。
これは、時々提案される afterFilter() を使用する代わりに、render() をオーバーライドすることによって行います。本当の理由は忘れましたが、afterFilter() を使って思ったように動作させることができなかったためだとわかっています;-)