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

时间:2015-04-06 19:59:23

标签: php laravel blade

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

这是我渲染视图的时候:

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;
    }

所以我在视图中尝试了很多东西,以便加载一些视图 ONLY 如果supervisor是真的(最后如果是根据我的代码设置的话)。

我尝试了什么

@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

这些都不起作用,我应该如何实现呢?

*以防万一,我正在使用会话......

2 个答案:

答案 0 :(得分:2)

自Laravel 5.4起,您可以使用@includeWhen。如[{3}}中所述:

  

包括子视图

     

如果您希望@include视图取决于给定的布尔值   条件,您可以使用@includeWhen指令:

@includeWhen($boolean, 'view.name', ['some' => 'data'])

答案 1 :(得分:1)

为什么不,而不是显示特定的视图,你为每个视图创建一个路由,然后根据用户角色,你将他重定向到其中一个页面?

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::to(..);

routes.php文件中,您将为每个视图制作路线。您可以过滤路由以确保用户具有其尝试访问的角色。有关Laravel 4.2过滤器的更多信息,请http://laravel.com/docs/4.2/routing#route-filters和此处http://laravel.com/docs/4.2/controllers#controller-filters

对于Laravel 5,使用middlware检查用户是否有权限:http://laravel.com/docs/5.0/middleware