我的网站有大约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 :(得分: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..
}
}
}