Laravel 4 - включно з "частковим" представленням у представленні даних (без використання шаблону Blade)

У Ларавелі 3 я це робив.

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

Це було зроблено у перегляді "PHP", не використовуючи шаблони Blade Laravel.

Що таке еквівалент у версії 4?

я намагався

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

Це не працює.

Якщо я це зробив

@include('partials.header')

Я повинен зберегти свій файл як ".blade.php"

Як включити "підгляд" без використання шаблону леза?

12
так що немає безпосереднього способу включити "частковий" PHP зараз?
додано Автор ericbae, джерело
Ви можете призначити дитячий вигляд змінній батьківського виду, використовуючи композитор перегляду, якщо дитина повинна бути завантажена. В іншому випадку вам потрібно пройти лезо і використовувати шаблонну систему
додано Автор Damien Pirsy, джерело
Я ще не використовував L4, тому я тут не дуже досвідчений, але переглядаю документи, про які я не бачу. У будь-якому разі, я вважаю, що використовуючи тубільну роботу include() outghta, але вам потрібно написати звичайний шлях, а не "laravel" шлях (тобто використовувати косу рисунки не точками)
додано Автор Damien Pirsy, джерело
@ ericbae Ви могли б вибрати/позначити прийняту відповідь :) спасибі
додано Автор Robin Hood, джерело

7 Відповіді

Існує кілька способів включення представлення даних у вигляді перегляду в Laravel 4. Ваш вибір буде залежати від будь-якого з наведених нижче результатів ...

Для гнучкості

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

Це може стати нудним, оскільки збільшується кількість переглядів, але, привіт, принаймні, є велика гнучкість :)

Нижче наведено приклад:

Контролер

...

public function showMyВид()
{
   /* Header partial Вид */
   $data['header'] = Вид::make('partials.header');

   /* Flexible enough for any kind of partial Видs you require (e.g. a Header Menu partial Вид) */
   $data['header_menu'] = Вид::make('partials.header_menu'); 

   /* Footer partial Вид */
   $data['footer'] = Вид::make('partials.footer');

   return Вид::make('myВид', $data);
}

...

Вид

You can include the partials above as follows (at any position in your Вид code):

<html>  
<head></head>   
<body>

<!-- include partial Видs -->
<?php echo ($header) ?>  
<?php echo ($header_menu) ?>  

<div id="main-content-area"></div>  

<?php echo ($footer) ?>  

</body>  
</html>

Your partial Видs will now be added to your main Вид.


Для простоти

There's actually a much easier way than using the method above: Simply include this in the html of the Вид...

Вид

<html>  
<head></head>   
<body>

<!-- include partial Вид: header -->
<?php echo Вид::make('partials.header') ?>

   <div id="main-content-area">
   </div>

<!-- include partial Вид: footer -->
<?php echo Вид::make('partials.footer') ?>

</body>  
</html>

Make sure that the folder structure for the partials is [Видs/partials/header.php] in order to provide the correct file-path to the Вид::make() function of Laravel.

УВАГА

If you try to pass the $data['page_title'] in a Контролер, the nested Видs wont receive the data.
To pass data to these nested Видs you need to do it like this:

<html>  
<head></head>   
<body>

<?php
   /* Pass page title to header partial Вид */
   $data ['page_title'] = "My awesome website";  
   echo Вид::make('partials.header', $data); 
?>

<div id="main-content-area"></div>

<?php echo Вид::make('partials.footer') ?>

</body>  
</html>

ПРИМІТКА

Питання чітко зазначалося: "Без використання шаблону Blade", тому я обов'язково надав рішення, яке не включало жодного шаблонного коду Blade.

Удачі :)

23
додано
Чи не так погано робити це? <? PHP echo View :: make ('partials.footer')?> Раніше мені сказали не робити цього.
додано Автор Darius.V, джерело
Це погана практика, передача даних через перегляди не рекомендується.
додано Автор Leysam Rosario, джерело
Перегляньте цю посилання для іншого рішення.
додано Автор Leysam Rosario, джерело
+1 для оновлення!
додано Автор PJunior, джерело
Додано примітку "And rename header.php to header.blade.php"!
додано Автор PJunior, джерело

Ви можете гніздити свої партії в переглядах спробувати це

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

Потім відкрийте файл вкладеного перегляду з вашого шаблону ({$ anyname}} таким чином, що вам не потрібно включати файли у вашому перегляді, і це також повинно працювати з файлом .php.

9
додано
Хоча це рішення використовує шаблони Blade (який спробує уникнути) ... 0.o
додано Автор Robin Hood, джерело

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

наприклад, якщо вам потрібна папка partials для заголовка, нижнього колонтитула, бічної панелі тощо

створіть каталог для частин під

app/views/partials

Потім створіть частковий

app/views/partials/navigation.blade.php

Тоді у вашому файлі шаблону додати рядок

@include('partials.navigation')

Це все, що потрібно.

** Бонус Ви також можете передавати дані часткові або включати вкладені партії в частковому порядку

8
додано
@include ('partials.navigation', array ('foo' => 'bar')) , щоб передавати дані до часткового
додано Автор Luca, джерело

Я знаю, що це трохи пізньої відповіді, але я вирішив, оскільки я не бачив це рішення серед інших відповідей, це було добре.

Якщо ви хочете включити заголовок і нижній колонтитул на кожну сторінку, я додам їх до фільтрів до і після. Просто перейдіть до filters.php у папку додатка

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

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

Роблячи це таким чином, вам не потрібно додавати нічого в файли перегляду, щоб їх включити.

5
додано

Ви можете використовувати функцію гнізда 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>
3
додано

Я до сих пір досить новий для 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()));
});

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

/views/page.php

<?php echo $header; ?>
<div>CONTENT</div>
<?php echo $footer; ?>
1
додано
Оскільки Laravel5 прибув, то вказаний URL буде laravel.com/docs/4.0/responses# представлення композиторів
додано Автор itsazzad, джерело

З точки зору, просто повторюйте інший вигляд:

echo View::make('header'); //This will look for a view called header.php
0
додано
буде виглядати де?
додано Автор itsazzad, джерело
Ukrainian PHP comunity
Ukrainian PHP comunity
885 учасників

dev-ua/php