мой сайт имеет около 6 разных ролей с кучей маршрутов, все они выглядят так:
admin.student.create
coordinator.student.create
Некоторые пользователи могут делать почти то же, что и другие, но с некоторыми отличиями, я хочу избежать необходимости копировать / вставлять тонны и тонны кода в мои представления следующим образом:
@if (Auth::user()->role->name == "SuperAdmin")
<a href="{{route('admin.group.create')}}">New Group</a>
@elseif (Auth::user()->role->name == "AcademicAdmin")
<a href="{{route('academic.group.create')}}">New Group</a>
@endif
Я пытаюсь сделать что-то вроде этого:
<a href="{{route('@stack('users').group.create')}}">New Group</a>
и на моем представлении users.blade.php
@push
@if (Auth::user()->role->name == "SuperAdmin")
admin
@elseif (Auth::user()->role->name == "AcademicAdmin")
academic
@endif
но это не работает
Я бы предложил создать сервис для упрощения вашего обзора:
@inject('routeGenerator', 'App\Services\RouteGeneratorService')<!-- your html -->
<a href="{{ $routeGenerator->make('group.create', auth()->user()) }}">New Group</a>
Таким образом, вы можете сделать сложный код для генерации маршрута и сделать ваш обзор простым.
Пример сервиса (Сервис — это просто причудливое имя для базового класса PHP):
<?php
namespace App\Services;
use App\User;
class RouteGeneratorService
{
public function __construct()
{
// Inject dependencies here if needed
}
public function make(string $route, User $user) : string
{
$type = $this->getUserType($user);
return route("$type.$route");
}
public function getUserType(User $user) : string
{
switch ($user->role->name) {
case 'SuperAdmin':
return 'admin';
case 'AcademicAdmin':
return 'academic';
// and so on..
}
}
}
Других решений пока нет …