在控制器中设置默认布局(Laravel 5.2)

时间:2016-07-01 01:08:41

标签: php laravel-5.2 laravel-blade

我想在我的BaseController中设置默认布局,以便它用于我拥有的每个视图。我不想使用" @ extends"在每一个视图中。

在Laravel 4中,这很容易做到。现在我无法在Laravel 5.2中找到任何方法。

有没有人有想法?

BTW:这是我关于stackoverflow的第一个问题,我希望我遵守这些规则。

1 个答案:

答案 0 :(得分:0)

我找到了解决方案。我愚蠢的不要深入了解Laravel 4代码。我认为布局在核心深处被链接,但它只是Controller,它具有“callAction”功能。此函数设置布局,然后调用正确的方法。

以下是此处的代码:

https://laracasts.com/discuss/channels/general-discussion/laravel-5-this-layout-content-not-working

<?php namespace App\Http\Controllers;

use Illuminate\Routing\Controller;

class BaseController extends Controller {

protected $layout = 'core::layouts.default';

/**
 * Show the user profile.
 */
public function setContent($view, $data = [])
{

    if ( ! is_null($this->layout))
    {
        return $this->layout->nest('child', $view, $data);
    }

    return view($view, $data);

}

/**
 * Set the layout used by the controller.
 *
 * @param $name
 * @return void
 */
protected function setLayout($name)
{
    $this->layout = $name;
}

/**
 * Setup the layout used by the controller.
 *
 * @return void
 */
protected function setupLayout()
{
    if ( ! is_null($this->layout))
    {
        $this->layout = view($this->layout);
    }
}


public function callAction($method, $parameters)
{
    $this->setupLayout();

    $response = call_user_func_array(array($this, $method), $parameters);


    if (is_null($response) && ! is_null($this->layout))
    {
        $response = $this->layout;
    }

    return $response;
}
}