Laravel 4 – включая «частичный» вид в представлении (без использования шаблона Blade)

В Laravel 3 я это делал.

<?php render('partials.header'); ?> 

Это было сделано в представлениях «PHP», без использования шаблонов Blade Laravel.

Что эквивалентно этому в версии 4?

Я пытался

 <?php @include('partials.header'); ?> 

Это не работает.

Если я сделаю

 @include('partials.header') 

Мне нужно сохранить мой файл как «.blade.php»

Как включить «subview» без использования шаблона клинка?

Существуют различные способы включения представления в представление в Laravel 4. Ваш выбор будет зависеть от любого из результатов, описанных ниже …

Для гибкости

Вы можете скомпилировать (визуализировать) частичные представления в соответствующем контроллере и передать эти представления в главный вид с использованием массива $data[''] .

Это может стать утомительным по мере увеличения количества просмотров, но эй, по крайней мере, есть много гибкости 🙂

См. Приведенный ниже код:

контроллер

 ... public function showMyView() { /* Header partial view */ $data['header'] = View::make('partials.header'); /* Flexible enough for any kind of partial views you require (eg a Header Menu partial view) */ $data['header_menu'] = View::make('partials.header_menu'); /* Footer partial view */ $data['footer'] = View::make('partials.footer'); return View::make('myView', $data); } ... 

Посмотреть

Вы можете включить частичные значения выше, как указано ниже (в любой позиции в вашем коде просмотра):

 <html> <head></head> <body> <!-- include partial views --> <?php echo ($header) ?> <?php echo ($header_menu) ?> <div id="main-content-area"></div> <?php echo ($footer) ?> </body> </html> 

Ваши частичные представления теперь будут добавлены в ваш основной вид.


Для простоты

На самом деле гораздо проще, чем использовать метод выше: просто включите это в html представления …

Посмотреть

 <html> <head></head> <body> <!-- include partial view: header --> <?php echo View::make('partials.header') ?> <div id="main-content-area"> </div> <!-- include partial view: footer --> <?php echo View::make('partials.footer') ?> </body> </html> 

Убедитесь, что структура папок для частичных файлов – [views / partials / header.php] , чтобы обеспечить правильный путь к элементу View :: make () функции Laravel.

ПРЕДУПРЕЖДЕНИЕ

Если вы попытаетесь передать $data['page_title'] в контроллер, вложенные представления не получат данные.
Чтобы передать данные этим вложенным представлениям, вам необходимо сделать это следующим образом:

 <html> <head></head> <body> <?php /* Pass page title to header partial view */ $data ['page_title'] = "My awesome website"; echo View::make('partials.header', $data); ?> <div id="main-content-area"></div> <?php echo View::make('partials.footer') ?> </body> </html> 

ЗАМЕТКА

В вопросе четко сказано: «Без использования шаблона Blade», поэтому я постарался дать решение, которое не включает код шаблона Blade.

Удачи 🙂

Попробуйте это сделать

 View::make('folder.viewFile')->nest('anyname', 'folder.FileName'); 

Затем вы получите доступ к вложенному файлу просмотра из вашего шаблона {{ $anyname }} таким образом, что вам не нужно включать файлы в ваше представление, и это также должно работать и с файлом .php.

Я не уверен, сколько людей использовали Laravel 4 в этом посте, начиная с этой записи, но если вы хотите включить частичные или отдельные типы просмотров, вы можете сделать это с помощью @includes

например, если вы хотите, чтобы папка partials для вашего заголовка, нижнего колонтитула, боковой панели и т. д.

создать каталог для

 app/views/partials 

Затем создайте частичный

 app/views/partials/navigation.blade.php 

Затем в вашем файле шаблона мастера добавьте строку

 @include('partials.navigation') 

Это все, что нужно.

** Бонус вы также можете передавать данные частичным или включать вложенные частицы в частичном

Я знаю, что это немного поздний ответ, но я подумал, что, поскольку я не видел этого решения среди других ответов, все было в порядке.

Если вы хотите добавить свой верхний и нижний колонтитул на каждую страницу, я бы добавил их в фильтры до и после. Просто перейдите в файл filters.php в папке приложения.

 App::before(function($request) { echo View::make('partials.header'); }); App::after(function($request, $response) { echo View::make('partials.footer'); }); 

При этом вам не нужно добавлять что-либо в файлы просмотра, чтобы их включить.

Вы можете использовать функцию гнезда View

 View::make('default.layout')->nest('header', 'default.header'); 

Используйте третий параметр для передачи данных в шаблон

 View::make('default.layout')->nest('header', 'default.header', ['name' => 'John Doe', 'test' => 'It works!']); 

по вашим представлениям / default / header.blade.php

 <div>hey {{ $name }}! {{ $test }}</div> 

Я все еще довольно новичок в Laravel, но я думаю, что это довольно просто …

 Route::get('/', function() { $data['title'] = 'sample'; return View::make('page', $data); }); # /views/partials/header.php # /views/partials/footer.php View::composer('page', function($view) { $view->with('header', View::make('partials.header', $view->getData())); $view->with('footer', View::make('partials.footer', $view->getData())); }); 

См. Laravel View Composers .. http://laravel.com/docs/responses#view-composers

/views/page.php

 <?php echo $header; ?> <div>CONTENT</div> <?php echo $footer; ?> 

Изнутри представления просто выделите другое представление:

 echo View::make('header'); //This will look for a view called header.php