2016-07-01 12 views
1

Ich möchte ein Standardlayout in meinem BaseController festlegen, so dass es für jede Ansicht verwendet wird, die ich habe. Ich möchte "@extends" nicht in jeder einzelnen Ansicht verwenden.Festlegen eines Standardlayouts im Controller (Laravel 5.2)

In Laravel 4 war dies einfach zu tun. Jetzt kann ich in Laravel 5.2 keinen Weg mehr finden.

Hat jemand eine Idee?

BTW: das ist meine erste Frage auf Stackoverflow, ich hoffe, dass ich die Regeln befolge.

Antwort

0

Ich fand die Lösung. Irgendwie dumm von mir, nicht tiefer in den Laravel 4 Code zu schauen. Ich dachte, dass Layouts irgendwo tief im Kern angekettet sind, aber es war nur der Controller, der eine "CallAction" -Funktion hat. Diese Funktion richtet das Layout ein und ruft dann die richtige Methode auf.

Unten ist der Code für diese, von hier genommen:

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