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);
    }
}

如果您查看BaseController,您会看到它所做的只是调用View::make()来设置布局视图。您可以执行相同的操作来覆盖其默认值。

于 2013-08-31T15:47:30.847 回答
1

好的,解决方案 1 似乎是可能的,但我认为是 fugly :

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