{{TOC}} {{DOCVER 5.3=c06d6a2352ed8c767633aab9c20f2bf7d880c967 28.01.2017 5:00:51, 5.2=6b0b057ae6de3c88cb29188459e38383c622ec23 8.12.2016 23:00:15, 5.1=cdc24ba7426c5b11eb4d050706bd78c3ea4913cc 19.06.2016 20:08:01, 5.0=5d10040a981deee82c0fde0e8e5d2ffc49eaaecb 8.02.2016 18:09:11}} == Создание представлений == Представления (//views//), они же //макеты//, содержат HTML-код, передаваемый вашим приложением. Это удобный способ разделения бизнес-логики и логики отображения информации. Представления находятся в каталоге %%(t)resources/views%%. Простое представление выглядит примерно так: %%(html)

Hello, {{ $name }}

%% Поскольку это представление хранится в %%(t)resources/views/greeting.blade.php%%, мы можем вернуть его в браузер при помощи глобальной вспомогательной функции %%view()%% примерно так: %% Route::get('/', function () { return view('greeting', ['name' => 'James']); }); %% Как видите, первый параметр, переданный вспомогательной функции %%view()%%, соответствует имени файла представления в каталоге %%(t)resources/views%%. Вторым параметром является массив данных, которые будут доступны для представления. В данном случае мы передаём переменную %%(t)name%%, которая отображается в представлении с использованием ((//docs/v5/blade синтаксиса Blade)). Конечно, представления могут быть и в поддиректориях %%(t)resources/views%%. Для доступа к ним можно использовать "точечную" запись. Например, если ваше представление хранится в %%(t)resources/views/admin/profile.blade.php%%, можно ссылаться на него вот так: %% return view('admin.profile', $data); %% **Определение существования представления** Если вам нужно определить, существует ли представление, вы можете использовать фасад %%(t)View%%. Метод %%exists()%% вернёт значение %%(t)true%%, если представление существует: %% use Illuminate\Support\Facades\View; if (View::exists('emails.customer')) { // } %% %%(DOCNEW 5.2=6b0b057ae6de3c88cb29188459e38383c622ec23 8.12.2016 23:00:15, 5.1=cdc24ba7426c5b11eb4d050706bd78c3ea4913cc 19.06.2016 20:08:01, 5.0=5d10040a981deee82c0fde0e8e5d2ffc49eaaecb 8.02.2016 18:09:11) Когда функция %%view()%% вызывается без аргументов, она возвращает реализацию контракта %%(t)Illuminate\Contracts\View\Factory%%, предоставляя вам доступ ко всем его методам. %% == Передача данных в представление == В предыдущих примерах вы увидели, что можете передать массив данных в представление: %% return view('greetings', ['name' => 'Victoria']); %% Вы также можете передать массив данных в качестве второго параметра в функцию %%view()%%: %% $view = view('greetings', $data); %% Передавая данные таким способом %%$data%% должен быть массивом с парами ключ/значение. Теперь эти данные можно получить в представлении, используя соответствующий ключ, подобно %%%%. Альтернативой передаче всего массива данных в функцию %%view()%% является использование метода %%with()%% для добавления отдельных частей данных в представление: %% return view('greeting')->with('name', 'Victoria'); %% **Передача данных во все представления** Иногда вам нужно передать данные во все представления вашего приложения. %%(DOCNEW 5.3=c06d6a2352ed8c767633aab9c20f2bf7d880c967 28.01.2017 5:00:51) Это можно сделать с помощью метода %%share()%% фасада представлений. Обычно вызов %%share()%% располагается в методе %%boot()%% сервис-провайдера. Вы можете вставить его в %%(t)AppServiceProvider%% или создать отдельный сервис-провайдер для него: ~%% share('key', 'value'); } /** * Регистрация сервис-провайдера. * * @return void */ public function register() { // } } ~%% %% %%(DOCNEW 5.0=5d10040a981deee82c0fde0e8e5d2ffc49eaaecb 8.02.2016 18:09:11) У вас есть несколько способов: функция %%view()%%, ((/docs/v5/contracts контракт)) %%(t)Illuminate\Contracts\View\Factory%% или шаблон ((#построители построителя представлений)). Например, используя функцию %%view()%%: ~%% view()->share('data', [1, 2, 3]); ~%% Вы также можете использовать фасад %%(t)View%%: ~%% View::share('data', [1, 2, 3]); ~%% Этот код вы можете поместить в метод %%boot()%% сервис-провайдера - либо общего сервис-провайдера приложения %%(t)AppServiceProvider%%, либо своего собственного. **Получение представления по указанному пути файла** Вы можете взять файл представления по его полному пути в файловой системе: ~%% return view()->file($pathToFile, $data); ~%% %% == ((#построители)) Построители представлений == Построители (view composers) - функции обратного вызова или методы класса, которые вызываются, когда представление отрисовано. Если у вас есть данные, которые вы хотите привязать к представлению при каждой его отрисовке, то построители помогут вам выделить такую логику в отдельном месте. Давайте для этого примера зарегистрируем свои построители в ((/docs/v5/providers сервис-провайдере)). В Laravel нет папки, в которой должны находится классы построителей. Вы можете создать её сами там, где вам будет удобно. Например, это может быть %%(t)App\Http\ViewComposers%%. %%(DOCNEW 5.3=c06d6a2352ed8c767633aab9c20f2bf7d880c967 28.01.2017 5:00:51) Мы воспользуемся фасадом %%view()%% для доступа к лежащей в основе реализации контракта %%(t)Illuminate\Contracts\View\Factory%%: ~%% composer( 'profile', 'App\Http\ViewComposers\ProfileComposer' ); // Использование построителей на основе замыканий... view()->composer('dashboard', function ($view) { // }); } /** * Регистрация сервис-провайдера. * * @return void */ public function register() { // } } ~%% %% %%(DOCNEW 5.0=5d10040a981deee82c0fde0e8e5d2ffc49eaaecb 8.02.2016 18:09:11) Мы будем использовать фасад %%(t)View%% для того, чтобы получить доступ к реализации контракта %%(t)Illuminate\Contracts\View\Factory%%: ~%% users = $users; } /** * Привязка данных к представлению. * * @param View $view * @return void */ public function compose(View $view) { $view->with('count', $this->users->count()); } } %% Непосредственно перед отрисовкой представления, метод построителя %%compose()%% вызывается с экземпляром %%(t)Illuminate\View\View%% (для версии 5.1 и ранее %%(t)Illuminate\Contracts\View\View%%). Вы можете использовать метод %%with()%%, чтобы привязать данные к представлению. .(alert) Все построители извлекаются из ((/docs/v5/container сервис-контейнера)), поэтому вы можете указать необходимые зависимости в конструкторе построителя - они будут автоматически поданы ему. **Построители представлений по маске** Вы можете присоединить построитель к нескольким представлениям сразу, передав массив в качестве первого аргумента метода %%composer()%%: %%(DOCNEW 5.3=c06d6a2352ed8c767633aab9c20f2bf7d880c967 28.01.2017 5:00:51) ~%% View::composer( ['profile', 'dashboard'], 'App\Http\ViewComposers\MyViewComposer' ); ~%% %% %%(DOCNEW 5.2=6b0b057ae6de3c88cb29188459e38383c622ec23 8.12.2016 23:00:15, 5.1=f60f8b3697b3ffe381df4ddb7e2875ffce940643 1.04.2016 17:39:10) ~%% view()->composer( ['profile', 'dashboard'], 'App\Http\ViewComposers\MyViewComposer' ); ~%% %% Метод %%composer()%% принимает символ %%(t)*%% как маску, позволяя присоединить построитель ко всем представлениям: %%(DOCNEW 5.3=c06d6a2352ed8c767633aab9c20f2bf7d880c967 28.01.2017 5:00:51) ~%% View::composer('*', function ($view) { // }); ~%% %% %%(DOCNEW 5.2=6b0b057ae6de3c88cb29188459e38383c622ec23 8.12.2016 23:00:15, 5.1=f60f8b3697b3ffe381df4ddb7e2875ffce940643 1.04.2016 17:39:10) ~%% view()->composer('*', function ($view) { // }); ~%% %% %%(DOCNEW 5.0=5d10040a981deee82c0fde0e8e5d2ffc49eaaecb 8.02.2016 18:09:11) **Назначение построителя для нескольких представлений** Метод %%composer()%% принимает символ %%(t)*%% как маску, Например, вот так можно назначить построитель для всех представлений: ~%% View::composer('*', function($view) { // }); ~%% **Назначение построителя для нескольких представлений** Вы можете также присоединить построитель к нескольким представлениям сразу: ~%% View::composer(['profile', 'dashboard'], 'App\Http\ViewComposers\MyViewComposer'); ~%% **Регистрация нескольких построителей** Вы можете использовать метод %%composers()%%, чтобы зарегистрировать несколько построителей одновременно: ~%% View::composers([ 'App\Http\ViewComposers\AdminComposer' => ['admin.index', 'admin.profile'], 'App\Http\ViewComposers\UserComposer' => 'user', 'App\Http\ViewComposers\ProductComposer' => 'product' ]); ~%% %% **Создатели представлений** Создатели представлений работают точно так же как построители, но выполняются сразу после создания объекта представления, не дожидаясь его отрисовки. Для регистрации создателя используйте метод %%creator()%%: %%(DOCNEW 5.3=c06d6a2352ed8c767633aab9c20f2bf7d880c967 28.01.2017 5:00:51, 5.0=5d10040a981deee82c0fde0e8e5d2ffc49eaaecb 8.02.2016 18:09:11) ~%% View::creator('profile', 'App\Http\ViewCreators\ProfileCreator'); ~%% %% %%(DOCNEW 5.2=6b0b057ae6de3c88cb29188459e38383c622ec23 8.12.2016 23:00:15, 5.1=f60f8b3697b3ffe381df4ddb7e2875ffce940643 1.04.2016 17:39:10) ~%% view()->creator('profile', 'App\Http\ViewCreators\ProfileCreator'); ~%% %%