Создание видов

Ищете больше информации о том, как писать шаблоны Blade? Ознакомьтесь с полной документацией Blade, чтобы начать.

Представления содержат HTML, предоставляемый вашим приложением, и отделяют логику вашего контроллера / приложения от вашей логики представления. Представления хранятся в каталоге. Простой вид может выглядеть примерно так:resources/views

<!-- View stored in resources/views/greeting.blade.php -->

<html>
    <body>
        <h1>Hello, {{ $name }}</h1>
    </body>
</html>

Поскольку это представление хранится в , мы можем вернуть его с помощью глобального помощника, например, так:resources/views/greeting.blade.phpview

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

Как видите, первый аргумент, передаваемый viewпомощнику, соответствует имени файла представления в каталоге. Второй аргумент - это массив данных, которые должны быть доступны для представления. В этом случае мы передаем переменную, которая отображается в представлении с использованием синтаксиса Blade .resources/viewsname

Представления также могут быть вложены в подкаталоги каталога. Точечная нотация может использоваться для ссылки на вложенные представления. Например, если ваше представление хранится в , вы можете ссылаться на него так:resources/viewsresources/views/admin/profile.blade.php

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

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

Если вам нужно определить, существует ли вид, вы можете использовать Viewфасад. existsМетод будет возвращать , trueесли представление существует:

use Illuminate\Support\Facades\View;

if (View::exists('emails.customer')) {
    //
}

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

Используя firstметод, вы можете создать первое представление, которое существует в данном массиве представлений. Это полезно, если ваше приложение или пакет позволяет настраивать или перезаписывать представления:

return view()->first(['custom.admin', 'admin'], $data);

Вы также можете вызвать этот метод через View фасад :

use Illuminate\Support\Facades\View;

return View::first(['custom.admin', 'admin'], $data);

 

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

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

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

При передаче информации таким способом данные должны представлять собой массив с парами ключ / значение. Внутри вашего представления вы можете получить доступ к каждому значению, используя соответствующий ключ, например . В качестве альтернативы для передачи полного массива данных в вспомогательную функцию, вы можете использовать метод для добавления отдельных частей данных в представление:<?php echo $key; ?>viewwith

return view('greeting')->with('name', 'Victoria');

 

Совместное использование данных со всеми представлениями

Иногда вам может понадобиться поделиться частью данных со всеми представлениями, отображаемыми вашим приложением. Вы можете сделать это, используя метод view фасад share. Как правило, вы должны совершать звонки shareвнутри bootметода поставщика услуг . Вы можете добавить их AppServiceProviderили создать отдельного поставщика услуг для размещения их:

<?php

namespace App\Providers;

use Illuminate\Support\Facades\View;

class AppServiceProvider extends ServiceProvider
{
    /**
     * Register any application services.
     *
     * @return void
     */
    public function register()
    {
        //
    }

    /**
     * Bootstrap any application services.
     *
     * @return void
     */
    public function boot()
    {
        View::share('key', 'value');
    }
}

 

Посмотреть композиторов

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

Для этого примера давайте зарегистрируем представления композиторов у поставщика услуг . Мы будем использовать Viewфасад для доступа к базовой реализации контракта. Помните, Laravel не включает каталог по умолчанию для композиторов представления. Вы можете организовать их так, как пожелаете. Например, вы можете создать каталог:Illuminate\Contracts\View\Factoryapp/Http/View/Composers

<?php

namespace App\Providers;

use Illuminate\Support\Facades\View;
use Illuminate\Support\ServiceProvider;

class ViewServiceProvider extends ServiceProvider
{
    /**
     * Register any application services.
     *
     * @return void
     */
    public function register()
    {
        //
    }

    /**
     * Bootstrap any application services.
     *
     * @return void
     */
    public function boot()
    {
        // Using class based composers...
        View::composer(
            'profile', 'App\Http\View\Composers\ProfileComposer'
        );

        // Using Closure based composers...
        View::composer('dashboard', function ($view) {
            //
        });
    }
}

Помните, что если вы создаете нового поставщика услуг, который будет содержать ваши регистрации View Composer, вам нужно будет добавить поставщика услуг в providersмассив в файле конфигурации.config/app.php

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

<?php

namespace App\Http\View\Composers;

use Illuminate\View\View;
use App\Repositories\UserRepository;

class ProfileComposer
{
    /**
     * The user repository implementation.
     *
     * @var UserRepository
     */
    protected $users;

    /**
     * Create a new profile composer.
     *
     * @param  UserRepository  $users
     * @return void
     */
    public function __construct(UserRepository $users)
    {
        // Dependencies automatically resolved by service container...
        $this->users = $users;
    }

    /**
     * Bind data to the view.
     *
     * @param  View  $view
     * @return void
     */
    public function compose(View $view)
    {
        $view->with('count', $this->users->count());
    }
}

Непосредственно перед визуализацией представления composeметод компоновщика вызывается с экземпляром. Вы можете использовать метод для привязки данных к представлению.Illuminate\View\Viewwith

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

Присоединение композитора к нескольким представлениям

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

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

composerМетод также принимает *характер в качестве шаблона, что позволяет прикрепить композитор всех видов:

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

View Creators

Посмотреть создатели очень похожи для просмотра композиторов; тем не менее, они выполняются сразу после того, как создается экземпляр представления, а не ожидают, когда представление собирается визуализироваться. Чтобы зарегистрировать создателя представления, используйте creatorметод:

View::creator('profile', 'App\Http\View\Creators\ProfileCreator');