Я два раза искал 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