在定义要渲染的视图时,我试图根据变量集包含一些视图。
这是我渲染视图的时候:
switch (Auth::user()->role) {
case 'ADMINISTRADOR':
return View::make('admin');
break;
case 'CAPTURISTA':
return View::make('capturista');
break;
case 'GERENTE DE DEPARTAMENTO':
return View::make('gerente');
break;
case 'SUPERVISOR DE COMPRAS':
return View::make('supervisor', array('supervisor'=>true));
break;
case 'GERENTE ADMINISTRATIVO':
return View::make('administrativo');
break;
}
因此,我在view中尝试了很多事情,以便在supervisor为true的情况下(最后,如果是根据我的代码设置的)仅加载一些视图。
我尝试过的
@if(isset($supervisor))
@include('includes.boss.supervisor.delivers_modal')
@include('includes.boss.supervisor.prices_modal')
@include('includes.boss.supervisor.providers_modal')
@endif
@if({{isset($supervisor)}})
@include('includes.boss.supervisor.delivers_modal')
@include('includes.boss.supervisor.prices_modal')
@include('includes.boss.supervisor.providers_modal')
@endif
<?php if(isset($message)) : ?>
@section('message')
<p>hey all</p>
@endsection
<?php endif; ?>
我还尝试为每个视图设置supervisor
变量,自然地设置为false和true。
@if($supervisor)
@include('includes.boss.supervisor.delivers_modal')
@include('includes.boss.supervisor.prices_modal')
@include('includes.boss.supervisor.providers_modal')
@endif
这些都不起作用,我该如何实现呢?
*以防万一,我正在使用会话
由于Laravel 5.4,您可以使用@includeWhen
。如文档中所述:
包括子视图
如果您想根据给定的布尔值
@include
视图条件下,可以使用@includeWhen
指令:@includeWhen($boolean, 'view.name', ['some' => 'data'])
为什么不显示特定的视图,而是为每个视图创建一个路由,然后根据用户角色将其重定向到其中一个页面?
switch (Auth::user()->role) {
case 'ADMINISTRADOR':
return redirect('administrador');
case 'CAPTURISTA':
return redirect('capturista');
...
然后在routes.php
:中
Route::get('administrador', function() {
return view('admin');
// for L4: View::make('admin');
});
//and one more for each role...
如果您使用的是Laravel 4,则需要使用Redirect facade,类似于Redirect::to(..)
;
在routes.php
文件中,您将为每个视图创建一条路线。您可以筛选路由,以确保用户具有其尝试访问的角色。点击此处了解更多关于Laravel 4.2过滤器的信息http://laravel.com/docs/4.2/routing#route-过滤器和此处http://laravel.com/docs/4.2/controllers#controller-过滤器
对于Laravel 5,使用middlware检查用户是否具有权限:http://laravel.com/docs/5.0/middleware