web-dev-qa-db-ja.com

Yii:コントローラーのレイアウトとは異なるレイアウトを使用してアクションをレンダリングする

Yiiで、コントローラーに定義されたものとは異なるlayoutを使用して単一のアクションをレンダリングする方法はありますか?他とは異なるフォーマットを設定したいアクションがありますが、それが可能かどうかはドキュメントから明確ではありません。

23
Matt Hampel

私はあなたが$layout変数を呼び出すことができるその行動を信じています。

public function actionYourAction()
{
    $this->layout = 'nameOfYourAltLayout';
}

以下のリンクの説明は、デフォルトのパブリック変数を設定するだけで、他のアクションのデフォルトをこれに戻すことができないため、すべてのアクションに対してこの変数を設定する必要があることを示しています。

http://www.yiiframework.com/wiki/28/how-to-implement-multiple-page-layouts-in-an-application/

:: Edit ::

ここでのベストプラクティスは、それを呼び出す特定のアクションのビュースクリプトで$layout変数を定義することです。たとえば、アクションがviewscriptone.phpを呼び出す場合、viewscriptoneビューファイルには以下が含まれます。

$this->layout = 'nameOfYourAltLayout';

コントローラーアクションではなく、ここでオーバーライドする方が理にかなっています。ただし、LDGが言ったように、レイアウトが条件付きである場合は、おそらくそれをコントローラーに保持する必要があります。この情報は、ページの[レイアウトの使用]セクションの下にある上記のリンクにあります。

51
k to the z

このwikiエントリは、レイアウトの使用方法を説明する上で非常に優れており、一読に値します。コントローラークラスの最初にレイアウトのデフォルトを設定し、特定のアクション関数内でそれをオーバーライドできると思います。各アクションでレイアウトを定義する必要はなく、少なくとも私にとってはうまくいきます。複雑な状況では beforeAction 関数を使用することもできます。そして、すでにご存じかもしれませんが、renderPartialを使用してレイアウトを完全にバイパスできます。

5
ldg