2016-07-01 1 views
1

저는 모든 뷰에 사용되도록 기본 레이아웃을 BaseController에 설정하고 싶습니다. 모든 단일보기에서 "@extends"를 사용하고 싶지 않습니다.컨트롤러에서 기본 레이아웃 설정하기 (Laravel 5.2)

Laravel 4에서는이 작업을 쉽게 수행 할 수있었습니다. 이제 Laravel 5.2에서이 작업을 수행 할 수있는 방법을 찾을 수 없습니다.

누구나 아이디어가 있습니까?

현재 :이 stackoverflow 내 첫 번째 질문입니다, 나는 규칙을 따르고있다 바랍니다.

답변

0

해결책을 찾았습니다. Laravel 4 코드를 더 깊이 들여다 보지 말라. 나는 레이아웃이 핵심 어딘가에 묶여 있다고 생각했지만, 컨트롤러는 "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; 
} 
} 
: 아래

여기에서 찍은의 코드이며,