如何使用中间件过滤laravel?

时间:2019-05-30 10:30:24

标签: laravel laravel-5

我正在尝试完善所有活动课程,这就是我尝试过的。

中间件称为状态

public function handle($request, Closure $next)
    {
      $status = $request->status();
      if($status == 'active'){
        return view('admin.courses.index');
      }

        return $next($request);
    }

我的路线叫中间件

Route::get('admin/courses/?active', 'Admin\CoursesController@index')->middleware('status');

我的视图有一个调用路线的按钮

<a href="{{ route('admin.courses.index') }}" style="margin-left:10px;" class="btn btn-success">
            Active <span class="badge badge-light">{{$course_count_active}}</span>
          <span class="sr-only">total courses</span></a>

此代码未过滤记录,我不确定自己在做什么错

2 个答案:

答案 0 :(得分:0)

首先,提供参数的正确语法是{parameter?}

现在第二个问题是问您是否在kernel.php文件中注册了中间件(我想您已经注册了,但是仍然需要确认)

现在您的按钮未提供要路由的参数

{{ route('admin.courses.index') }}

这意味着您的中间件将运行$next($request)

因此,如果您需要查看视图部分(您所说的过滤器),请像{{ route('admin.courses.index',['status'=>'active']) }}

那样操作

现在最后一次给出命名路由,如果您不给出命名路由,那么您将无法呼叫route(),像下面这样命名路由

Route::get('admin/courses/{status?}', 'Admin\CoursesController@index')->name('admin.courses.index')->middleware('status');

并像上面一样给参数名称status

更新

另一个错误是您无法像以前那样获取参数。

$status = $request->status();

只需在下面写下

$status = $request->status;

更新

所以现在您遇到错误setCooking on member function,因为您return view('someview')形成了中间件,这根本不是一个好习惯。

中间件中的

使用redirect()进行路由。 因此,我建议您选择一条返回视图的路线。

并从中间件重定向到此路由将解决您的问题。

答案 1 :(得分:0)

2天后,我意识到我缺少csfr令牌。这是我所做的修改,现在可以使用。

表格-刀片

<input type="hidden" name="_token" id="token" value="{{ csrf_token() }}">

在Ajax脚本中:

$.ajax({
        url: url,
        method: method,
        data: {
        "_token": $('#token').val(),
        'item':$('#item').val(),
        "description": $('#description').val(),
      },

        success: function(response) {

        },

        error: function(xhr) {

      var error = xhr.responseJSON;
      if ($.isEmptyObject(error) == false) {
          $.each(error.errors, function(key, value) {
            $('#' + key)
              .closest('.form-group')
              .addClass('has-error')
              .append('<span class="help-block"><strong>' + value + '</strong></span>')

          });
      }
    }