web-dev-qa-db-ja.com

Zend Framework 2.0のコントローラーでレイアウトを変更する

私はZF2.0 betaを学習しています。 ZF1では、コントローラーをオンザフライでレイアウトを変更できます。

Zend_Layout::getMvcInstance()->setLayout('layoutname');

しかしZF2.では、Zend\LayoutクラスにはメソッドgetMvcInstance()がありません。依存性注入を使用して作成できると思いますが、確かではありません。

26
Alex Pliutau

ZF2は開発中のため、現在の動作を保証することはできず、ZF2が安定した状態に達したときの動作になります。

ただし、Zend\Mvcの新しいビューレイヤーは最近マージされたので、現在のマスターでこれを実行できるはずです。

public function somethingAction () 
{
    // Do some intelligent work

    $this->layout('layout/different');
}
58
Jurian Sluiman

アクションでテンプレートを設定するために見つけた最良の方法は次のとおりです

public function someAction() {
    $viewModel = new ViewModel();
    $viewModel->setTemplate('layout/custom');

    return $viewModel;
}

あなたのmodule.config.php適切な値を設定していることを確認してくださいtemplate_map 道。

    'view_manager' => array(
    'template_map' => array(
        'layout/custom' => __DIR__ . '/../view/layout/custom.phtml'
    ),
),
8
TALLBOY
public function someAction() {
    $layout = $this->layout();
    $layout->setTemplate('layout/custom');
    $viewModel = new ViewModel();
    return $viewModel;
}
7
Aurel Avramescu

上記のヒントを試しました。

public function somethingAction () 
{
    // Do some intelligent work

    $this->layout('layout/different');
}

このスニペットで正しい結果を得ました。

public function someAction() {
    $viewModel = new ViewModel();
    $viewModel->setTemplate('layout/custom');

    return $viewModel;
}

両方のレイアウト(デフォルト&現在のモジュール)をフェッチしました。

3
2plus

bootstrapまたはdiを使用する場合は、レイアウトを設定する必要があります。Diの例:

    'Zend\View\Resolver\TemplateMapResolver' => array(
        'parameters' => array(
            'map'  => array(
            'layout/different' => __DIR__ . '/../view/layout/different.phtml',
            ),
        ),
    ),
3
RedPhoenix