Пытаюсь сделать директиву blade, которая проверяла бы роль пользователя (является ли он админом). Все таблицы, связи, модельки вроде бы есть.
Чтобы не писать длинные конструкции во view типа (они то работают)
@if(auth()->check() && auth()->user()->hasRole('admin')):
решил сделать директиву role.
Создал RoleServiceProvider со следующим содержимым:
class RoleServiceProvider extends ServiceProvider
{
public function boot() {
/*Blade::directive('role', function ($role) {
return "<?php if(auth()->check() && auth()->user()->hasRole({$role})): ?>";
});
Blade::directive('endrole', function ($role) {
return "<?php endif; ?>";
});*/
Blade::if('role', function ($role) {
return auth()->check() && auth()->user()->hasRole({$role});
});
}
}
Зарегистрировал его в config/app.php:
'providers' => [
App\Providers\AppServiceProvider::class,
App\Providers\AuthServiceProvider::class,
// App\Providers\BroadcastServiceProvider::class,
App\Providers\EventServiceProvider::class,
App\Providers\RouteServiceProvider::class,
//добавляем новые service providers
App\Providers\RoleServiceProvider::class,
Однако в такой простейшей конструкции
@extends('layouts.layout')
@section('title', 'Каталог')
@section('content')
<main id="content">
<div class="container">
<div class="row">
@role('admin')
<p> admin </p>
@else
<p> not admin </p>
@endrole
</div>
</div>
</main>
@endsection
выдается ошибка на строке @else
ParseError
syntax error, unexpected 'else' (T_ELSE), expecting end of file (View: D:\labs\laravelSSPR\resources\views\catalog.blade.php)
Если уберу else, то окажется, что он просто пропускает эти директивы и напечатает мне на экране
@role('admin')
<p> admin </p>
@endrole