Laravel 4 - включая "частичный" вид в представлении (без использования шаблона Blade)
В Laravel 3 я использовал это.
<?php render('partials.header'); ?>
Это было сделано в представлениях "PHP", без использования шаблонов Laravel Blade.
Что эквивалентно этому в версии 4?
Я пробовал
<?php @include('partials.header'); ?>
Это не работает.
Если я делаю
@include('partials.header')
Мне нужно сохранить файл как .blade.php
Как включить "subview" без использования шаблона клинка?
Ответы
Ответ 1
Существуют различные способы включения представления в представление в 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 (e.g. 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.
Удачи:)
Ответ 2
Вы можете вложить свои частичные части в представлениях, попробуйте это
View::make('folder.viewFile')->nest('anyname', 'folder.FileName');
Затем перейдите в файл вложенного представления из вашего шаблона {{ $anyname }}
таким образом, вам не нужно включать файлы в свое представление, и это также должно работать и с файлом .php.
Ответ 3
Я не уверен, сколько людей использовали Laravel 4 в этом посте, начиная с этого поста, но если вы хотите включить частичные или отдельные типы просмотров, вы можете сделать это с помощью @includes
например, если вы хотите, чтобы папка partials для вашего заголовка, нижнего колонтитула, боковой панели и т.д.
создать каталог для партикулов под
app/views/partials
Затем создайте частичный
app/views/partials/navigation.blade.php
Затем в вашем файле основного шаблона добавьте строку
@include('partials.navigation')
Это все, что нужно.
** Бонус вы также можете передавать данные частичным или включать вложенные частичные части в частичном
Ответ 4
Я знаю, что это немного поздний ответ, но я подумал, что, поскольку я не видел этого решения среди других ответов, все было в порядке.
Если вы хотите добавить свой верхний и нижний колонтитул на каждую страницу, я бы добавил их в фильтры до и после. Просто перейдите в файл filters.php в папке вашего приложения.
App::before(function($request)
{
echo View::make('partials.header');
});
App::after(function($request, $response)
{
echo View::make('partials.footer');
});
При выполнении этого способа вам не нужно добавлять что-либо в файлы просмотра, чтобы включить их.
Ответ 5
Вы можете использовать функцию представления гнезда
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>
Ответ 6
Я все еще довольно новичок в 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; ?>
Ответ 7
Внутри представления просто выделите другое представление:
echo View::make('header'); //This will look for a view called header.php