2016-07-01 11 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; 
} 
} 
関連する問題