如何有条件地将视图包含在Blade with Laravel中


How to conditionally include views in Blade with Laravel?

在定义要渲染的视图时,我试图根据变量集包含一些视图。

这是我渲染视图的时候:

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