Создание видов
Ищете больше информации о том, как писать шаблоны 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.php
view
Route::get('/', function () {
return view('greeting', ['name' => 'James']);
});
Как видите, первый аргумент, передаваемый view
помощнику, соответствует имени файла представления в каталоге. Второй аргумент - это массив данных, которые должны быть доступны для представления. В этом случае мы передаем переменную, которая отображается в представлении с использованием синтаксиса Blade .resources/views
name
Представления также могут быть вложены в подкаталоги каталога. Точечная нотация может использоваться для ссылки на вложенные представления. Например, если ваше представление хранится в , вы можете ссылаться на него так:resources/views
resources/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; ?>
view
with
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\Factory
app/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\View
with
Все составители представлений разрешаются через служебный контейнер , поэтому вы можете указывать любые зависимости, которые вам нужны, в конструкторе составителя.
Присоединение композитора к нескольким представлениям
Вы можете присоединить компоновщик представлений к нескольким представлениям одновременно, передав массив представлений в качестве первого аргумента 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');
Очень удобно использовать blade шаблоны для фронтенда. Нет необходимости смотреть на весь ужас php.