2017-01-19 3 views
0

моего сайта имеет около 6 различных ролей с тонной маршрутов, все они идут так:использования @push и @stack в Laravel Клинке изменить маршрут в зависимости от пользователя

admin.student.create координатора. 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> 

нравится, что вы можете сделать сложный код, чтобы создать маршрут и сохранить свой вид просто.

Пример службы (Service просто причудливое название для базового класса 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

ой хорошая идея! не могли бы вы показать небольшой пример того, что должно идти на службу? (kinda new to laravel) - btw using 5.2 Большое спасибо – Malkios

+0

Я обновил свой ответ с помощью примера сервиса :) –

+0

Отлично! ты мой новый персональный герой, спасибо большое. Просто, чтобы добавить немного к ответу: правильный HTML будет: New Group Таким образом, маршрут будет работать на 100% Спасибо большое! – Malkios