Laravel правильно определяет компоновку по умолчанию от контроллера

Я два раза искал Google, но не нашел ответа. Может быть, вы можете помочь.

Когда я определяю в MyController :

class MyController extends Base_Controller { public $layout = 'layouts.default'; public function get_index() { $entries = Entry::all(); return View::make('entries.index') ->with('entries', $entries); } } } 

Вхождения \ index.blade.php :

 @section('content') <h1>Test</h1> @endsection 

И в макетах \ default.blade.php :

 <!DOCTYPE html> <html> <body> @yield('content') </body> </html> 

Ничего не отображается. И я не понимаю, почему. Когда я заменяю в части возврата MyController с помощью:

 $this->layout->nest('content', 'entries.index', array( 'entries' => $entries )); 

Тогда все работает, но .. Это выглядит не чистым, и мне это не нравится. При добавлении во все виды @layout('layouts.default') все работает хорошо, но это не СУХОЙ. Например, в RoR мне не нужно делать такие вещи в контроллере.

Как определить в MyController один макет и использовать return View::make (я думаю, что это правильный путь) или как это сделать лучше?

Чтобы использовать макеты в контроллерах, вы должны указать:

 public $layout = 'layouts.default'; 

Вы также не можете вернуться в метод, поскольку он переопределит использование $ layout. Вместо этого, чтобы внедрить свой контент в макет, который вы используете:

 $this->layout->nest('content', 'entries.index', array('entries' => $entries)); 

Теперь нет необходимости возвращать что-либо в вашем методе. Это исправит это.


Редактировать:

«Красивые способы?»

 $this->layout->nest('content', 'entries.index')->with('entries', $entries); $this->layout->content = View::make('entries.index')->with('entries', $entries); $this->layout->entries = $entries; $this->layout->nest('content', 'entries.index'); 

Должен быть

 public $layout = 'layouts.default'; 

Вот ссылка Templating – The Basics

Теперь вы можете вернуть свой макет таким образом

 $view = View::make('entries.index')->with('entries', $entries); $this->layout->content = $view->render(); 
  class BaseController extends Controller { /** * Setup the layout used by the controller. * * @return void */ /*Set a layout properties here, so you can globally call it in all of your Controllers*/ protected $layout = 'layouts.default'; protected function setupLayout() { if ( ! is_null($this->layout)) { $this->layout = View::make($this->layout); } } 

}

class HomeController расширяет BaseController {

 public function showHome() { /*now you can control your Layout it here */ $this->layout->title= "Hi I am a title"; //add a dynamic title $this->layout->content = View::make('home'); } 

}

Ссылка: http://teknosains.com/i/tutorial-dynamic-layout-in-laravel-4