Для информации о том, как писать шаблоны посетите соответствующией
раздел документации.
Представление
Содержание:
Создание представлений
Представления содержат HTML и отделяет логику контроллера от логики презентации. Представления располагаются в папке resources/views. Самое просто представление может выглядеть таким образом:
<html>
<body>
<h1>Hello, {{ $name }}</h1>
</body>
</html>
Представления располагаются в директории resources/views/greeting.blade.php. Вернуть представление можно используя глобальную функцию-помощник view таким образом:
Route::get('/', function () {
return view('greeting', ['name' => 'James']);
});
Не трудно заметить, что первый аргумент, который передаётся в функцию-помощник view соответсвует названию файла представления в папке resources/views. Второй аргумент это массив данных, которые должны быть доступны в представлении. В этом случае мы передаём переменную name, которая отображается в представлении, используя синтаксис Blade.
Представления можно сгруппировать во вложенной директории от папки 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; ?>. Как альтернатива, для передачи массива данных в представление, можно использовать метод with, чтобы сформировать индивидуальные пары данных в представление:
return view('greeting')->with('name', 'Victoria');
Распространение данных для всех представлений
Может так случиться, что вам необходимо сделать часть данных общедоступными для всех представлений в вашем приложении. Это можно сделать используя метод share для фасада view. В стандартной ситуации вы должны расположить share внутри метода boot сервис провайдера. Вы легко можете выбрать AppServiceProvider или сгенерировать другой сервис провайдер, чтобы разместить обращения к методу share там:
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 для получения доступа к реализации контракта Illuminate\Contracts\View\Factory. По умолчанию, Ларавел не содержит папки для композиторов представлений. Но вы легко можете сделать такую. Например, можно создать директорию app/Http/View/Composers:
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) {
//
});
}
}
Теперь когда композитор зарегистрирован, метод ProfileComposer@compose будет выполняться каждый раз при отображении представления profile. Давайте определим класс композера:
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) {
//
});
Создатели представлений
Создатели представлений очень похожи на композиторы представлений, но они выполняют сразу после обращения к представлению, а не ждут момента, когда представление готово к отображению. Чтобы зарегистрировать создателя представлений, используйте метод creator:
View::creator('profile', 'App\Http\View\Creators\ProfileCreator');