Php 在Laravel Blade中使用@push和@stack根据用户更改路由
我的网站有大约6个不同的角色和大量的路线,它们都是这样的: admin.student.create 协调员。学生。创建 有些用户几乎可以做其他用户可以做的事情,但有一些不同之处,我希望避免在我的视图中复制/粘贴大量代码,如下所示:Php 在Laravel Blade中使用@push和@stack根据用户更改路由,php,laravel,blade,Php,Laravel,Blade,我的网站有大约6个不同的角色和大量的路线,它们都是这样的: admin.student.create 协调员。学生。创建 有些用户几乎可以做其他用户可以做的事情,但有一些不同之处,我希望避免在我的视图中复制/粘贴大量代码,如下所示: @if (Auth::user()->role->name == "SuperAdmin") <a href="{{route('admin.group.create')}}">New Group</a> @elseif (Au
@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
但是它不起作用。我建议创建一个服务来简化您的视图:
@inject('routeGenerator', 'App\Services\RouteGeneratorService')
<!-- your html -->
<a href="{{ $routeGenerator->make('group.create', auth()->user()) }}">New Group</a>
@inject('routeGenerator','App\Services\RouteGeneratorService')
这样,您就可以编写复杂的代码来生成路由,并使视图保持简单
服务示例(服务只是一个基本PHP类的花哨名称):
哦,好主意!你能举一个小例子说明服务应该做些什么吗?(对laravel来说有点新)-顺便说一句,使用5.2非常感谢!你是我新的个人英雄,非常感谢。再补充一点:正确的html应该是:这样路线将100%工作,非常感谢!哎呀,对不起,我忘了调用route(),我宁愿在服务中调用它,以免每次都在视图中写入它。真的,好主意。另外,如果我想从所有视图(大约100个)调用它,我是否需要向所有视图添加@inject?因为将其添加到基本布局不起作用。您可以使用视图生成器一次在多个视图中注入服务(或任何变量):
@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
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..
}
}
}