используя @push и @stack в Laravel Blade, чтобы изменить маршрут в зависимости от пользователя

мой сайт имеет около 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

но это не работает

0

Решение

Я бы предложил создать сервис для упрощения вашего обзора:

@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..
}
}
}
0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector