3

私はこのようなものを持っています:

class AController extends BaseController
{
  protected $layout = "templates.layouts.master";
  protected $data = "something";

  public function alt()
  {
    // this is wrong
    // i want to override "templates.layouts.master"
    // missing something obviously here
    $this->layout = ??? what should do?
    $this->layout->content = View::make("content", $this->data);
  }
}

メソッド alt で、デフォルトの「templates.layouts.master」とは異なるレイアウトを使用したいと考えています。

私はlaravel 4の知識が非常に限られています。これは簡単に達成できるかもしれませんが、私の知識を超えています。

私が予見する可能な解決策:

  1. コンストラクト メソッドを定義し、現在のメソッドが何であるかを検出し、$layout に別の値を設定します (ただし、現在のメソッド名を取得する方法がわかりません)。
  2. 上記のような割り当てを行います。

正しい方法はどれですか?

4

2 に答える 2

8

メソッドごとにレイアウトを別のビューに設定できます。

class AController extends BaseController
{
    protected $layout = "templates.layouts.master";
    protected $data = "something";

    public function alt()
    {
        $this->layout = View::make('templates.layouts.alt');
        $this->layout->content = View::make("content", $this->data);
    }
}

を調べると、 View::make()を呼び出してレイアウト ビューを設定するBaseControllerだけであることがわかります。同じことを行って、デフォルトをオーバーライドできます。

于 2013-08-31T15:47:30.847 に答える
1

OK、解決策1は可能のようですが、私は醜いと思います:

class AController extends BaseController
{
  public function __construct()
  {
    if (Request::is("..."))
    {
        $this->layout = "alternative layout";
    }
  }
}
于 2013-08-30T10:45:53.937 に答える