Может войдёшь?
Черновики Написать статью Профиль

Представления

перевод документация 5.х

  1. 1. Основы использования
  2. 2. Данные представления
  3. 3. Построители представлений
    1. 3.1. Создатели представлений
Этот перевод актуален для англоязычной документации на (ветка 5.1) и (ветка 5.0). Опечатка? Выдели и нажми Ctrl+Enter.

Основы использования

Представления (views), они же макеты, содержат HTML-код, передаваемый вашим приложением. Это удобный способ разделения бизнес-логики и логики отображения информации. Представления находятся в каталоге resources/views.

Простое представление выглядит примерно так:

xml<!-- Представление resources/views/greeting.php -->

<html>
  <body>
    <h1>Привет, <?php echo $name; ?></h1>
  </body>
</html>

Поскольку это представление хранится в resources/views/greeting.php, мы можем вернуть его в браузер при помощи глобальной вспомогательной функции PHPview() примерно так:

PHP
Route::get('/', function ()    {
  return 
view('greeting', ['name' => 'James']);
});

Как видите, первый параметр, переданный вспомогательной функции PHPview(), соответствует имени файла представления в каталоге resources/views. Вторым параметром, переданным функции, является массив данных, которые будут доступны для представления. В данном случае мы передаём переменную name, которая отображается в представлении при помощи простого выполнения shecho для этой переменной.

Конечно, представления могут быть и в поддиректориях resources/views. Для доступа к ним можно использовать «точечную» запись. Например, если ваше представление хранится в resources/views/admin/profile.php, можно ссылаться на него вот так:

PHP
return view('admin.profile'$data);

Определение существования представления

Если вам нужно определить, существует ли представление, вы можете использовать метод PHPexists() после вызова функции PHPview() без аргументов. Этот метод вернёт значение true, если представление есть на диске:

PHP
if (view()->exists('emails.customer')) {
  
//
}

Когда функция PHPview() вызывается без аргументов, она возвращает реализацию контракта Illuminate\Contracts\View\Factory, предоставляя вам доступ ко всем его методам.

Данные представления

Передача данных в представление

В предыдущих примерах вы увидели, что можете легко передать массив данных в представление:

PHP
return view('greetings', ['name' => 'Victoria']);

Вы также можете передать массив данных в качестве второго параметра в функцию PHPview():

PHP
$view view('greetings'$data);

Передавая данные таким способом PHP$data должен быть массивом с парами ключ/значение. Теперь эти данные можно получить в представлении, используя соответствующий ключ, подобно PHP<?php echo $key?>. Альтернативой передаче всего массива данных в функцию PHPview() является использование метода PHPwith() для добавления отдельных частей данных в представление:

PHP
$view view('greeting')->with('name''Victoria');

Передача данных во все представления

Иногда вам нужно передать данные во все представления вашего приложения.

+ 5.1

добавлено в 5.1 ()

Это можно сделать с помощью метода PHPshare() контракта представлений. Обычно вызов PHPshare() располагается в методе PHPboot() сервис-провайдера. Вы можете вставить его в AppServiceProvider или создать отдельный сервис-провайдер для него:

PHP
<?php

namespace App\Providers;

class 
AppServiceProvider extends ServiceProvider
{
  
/**
   * Загрузка всех сервисов приложения.
   *
   * @return void
   */
  
public function boot()
  {
    
view()->share('key''value');
  }

  
/**
   * Регистрация сервис-провайдера.
   *
   * @return void
   */
  
public function register()
  {
    
//
  
}
}
+ 5.0

добавлено в 5.0 ()

У вас есть несколько способов: функция PHPview(), контракт Illuminate\Contracts\View\Factory или шаблон построителя представлений.

Например, используя функцию PHPview():

PHP
view()->share('data', [123]);

Вы также можете использовать фасад View:

PHP
View::share('data', [123]);

Этот код вы можете поместить в метод PHPboot() сервис-провайдера — либо общего сервис-провайдера приложения AppServiceProvider, либо своего собственного.

Получение представления по указанному пути файла

Вы можете взять файл представления по его полному пути в файловой системе:

PHP
return view()->file($pathToFile$data);

Построители представлений

Построители (view composers) — функции обратного вызова или методы класса, которые вызываются, когда представление отрисовано. Если у вас есть данные, которые вы хотите привязать к представлению при каждой его отрисовке, то построители помогут вам выделить такую логику в отдельном месте.

Давайте зарегистрируем свои построители в сервис-провайдере. В Laravel нет папки, в которой должны находится классы построителей. Вы можете создать её сами там, где вам будет удобно. Например, это может быть App\Http\ViewComposers.

+ 5.1

добавлено в 5.1 ()

Мы воспользуемся функцией PHPview() для доступа к лежащей в основе реализации контракта Illuminate\Contracts\View\Factory:

PHP
<?php

namespace App\Providers;

use 
Illuminate\Support\ServiceProvider;

class 
ComposerServiceProvider extends ServiceProvider
{
  
/**
   * Регистрация привязок в контейнере.
   *
   * @return void
   */
  
public function boot()
  {
    
// Использование построителей на основе класса...
    
view()->composer(
      
'profile''App\Http\ViewComposers\ProfileComposer'
    
);

    
// Использование построителей на основе замыканий...
    
view()->composer('dashboard', function ($view) {

    });
  }

  
/**
   * Регистрация сервис-провайдера.
   *
   * @return void
   */
  
public function register()
  {
    
//
  
}
}
+ 5.0

добавлено в 5.0 ()

Мы будем использовать фасад View для того, чтобы получить доступ к реализации контракта Illuminate\Contracts\View\Factory:

PHP
<?php namespace App\Providers;

use 
View;
use 
Illuminate\Support\ServiceProvider;

class 
ComposerServiceProvider extends ServiceProvider {

  
/**
   * Регистрация привязок в контейнере.
   *
   * @return void
   */
  
public function boot()
  {
    
// Если построитель реализуется при помощи класса...
    
View::composer('profile''App\Http\ViewComposers\ProfileComposer');

    
// Если построитель реализуется в функции-замыкании...
    
View::composer('dashboard', function($view)
    {

    });
  }

  
/**
   * Регистрация сервис-провайдера
   *
   * @return void
   */
  
public function register()
  {
    
//
  
}

}

Не забывайте, при создании нового сервис-провайдера для регистрации ваших построителей представлений, вам нужно будет добавить его в массив providers в конфигурационном файле config/app.php.

Теперь, когда построитель зарегистрирован, при каждой отрисовке представления profile будет вызываться метод PHPProfileComposer@compose. Давайте определим класс построителя:

PHP
<?php

namespace App\Http\ViewComposers;

use 
Illuminate\Contracts\View\View;
use 
Illuminate\Users\Repository as UserRepository;

class 
ProfileComposer
{
  
/**
   * Реализация пользовательского репозитория.
   *
   * @var UserRepository
   */
  
protected $users;

  
/**
   * Создание построителя нового профиля.
   *
   * @param  UserRepository  $users
   * @return void
   */
  
public function __construct(UserRepository $users)
  {
    
// Зависимости автоматически извлекаются сервис-контейнером...
    
$this->users $users;
  }

  
/**
   * Привязка данных к представлению.
   *
   * @param  View  $view
   * @return void
   */
  
public function compose(View $view)
  {
    
$view->with('count'$this->users->count());
  }
}

Непосредственно перед отрисовкой представления, метод построителя PHPcompose() вызывается с экземпляром Illuminate\Contracts\View\View. Вы можете использовать метод PHPwith(), чтобы привязать данные к представлению.

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

+ 5.1

добавлено в 5.1 ()

Построители представлений по маске
Вы можете также присоединить построитель к нескольким представлениям сразу, передав массив в качестве первого аргумента метода PHPcomposer():

PHP
view()->composer(
  [
'profile''dashboard'],
  
'App\Http\ViewComposers\MyViewComposer'
);

Метод PHPcomposer() принимает символ * как маску, позволяя присоединить построитель ко всем представлениям:

PHP
view()->composer('*', function ($view) {
  
//
});
+ 5.0

добавлено в 5.0 ()

Назначение построителя для нескольких представлений

Метод PHPcomposer() принимает символ * как маску, Например, вот так можно назначить построитель для всех представлений:

PHP
View::composer('*', function($view)
{
  
//
});

Назначение построителя для нескольких представлений

Вы можете также присоединить построитель к нескольким представлениям сразу:

PHP
View::composer(['profile''dashboard'], 'App\Http\ViewComposers\MyViewComposer');

Регистрация нескольких построителей

Вы можете использовать метод PHPcomposers(), чтобы зарегистрировать несколько построителей одновременно:

PHP
View::composers([
  
'App\Http\ViewComposers\AdminComposer' => ['admin.index''admin.profile'],
  
'App\Http\ViewComposers\UserComposer' => 'user',
  
'App\Http\ViewComposers\ProductComposer' => 'product'
]);

Создатели представлений

Создатели представлений работают точно так же как построители, но вызываются сразу после создания объекта представления, не дожидаясь его отрисовки. Для регистрации создателя используйте метод PHPcreator():

PHP
view()->creator('profile''App\Http\ViewCreators\ProfileCreator');
+ 5.0

добавлено в 5.0 ()

PHP
View::creator('profile''App\Http\ViewCreators\ProfileCreator');

Комментарии (2)

Alex779

Нужна помощь! Устанавливаю чистый проект, и хочу передать переменую во все представления, но ничего не получается. В методе boot AppServiceProvider.php прописываю die() и ничего не происходит. В чем может быть проблема?

tmanager

Совсем нет описания «логики», которую можно включать во view. Например, @include

Написать комментарий

Разметка: ? ?

Авторизуйся, чтобы прокомментировать.