Laravel 5:如何使用简单的出生日期中间件(在过滤器之前)


Laravel 5 : How to use simple birth date middleware(before filter)?

如果日期匹配,我想打印"Happy Birthday",否则我想显示一些东西。所以我在我的"/"路由中使用中间件。

我的路线
Route::get('/', ['middleware' => 'dob', function(){
    return 'Hello World';
}]);

我的内核

protected $routeMiddleware = [
        'auth' => 'App'Http'Middleware'Authenticate',
        'auth.basic' => 'Illuminate'Auth'Middleware'AuthenticateWithBasicAuth',
        'guest' => 'App'Http'Middleware'RedirectIfAuthenticated',
        'dob' => 'App'Http'Middleware'DateOfBirth'
    ];
我中间件/DateOfBirth.php

public function handle($request, Closure $next)
    {
        if($request->date('d/m') == '15/09' ){
            echo 'happy birthday';
        }
        return $next($request);
    }

我只是将当前日期更改为15并访问公共应用程序,但为什么它显示Call to undefined method Illuminate'Http'Request::date()而不是"生日快乐"?

正如异常所说,问题是您对请求对象上的date()方法的调用。默认的请求类没有实现这个方法——你用这个方法扩展请求类了吗?或者您想要访问任何输入数据或来自A模型的数据,或者仅仅意味着php date()函数?如果你告诉我们这个方法调用应该做什么,那么我们可以更好地提供帮助!

正如其他人指出的,请求对象上没有date()方法。我认为你需要更像:

public function handle($request, Closure $next)
{
    $date = $request->get('date');
    if((new 'DateTime($date))->format('d/m') == '15/09' ){
        echo 'happy birthday';
    }
    return $next($request);
}

在Laravel 4中滤镜有一点不同

public function handle($request, Closure $next)
{
    if(date('d/m') == '15/09' ){
        echo 'happy birthday';
    }
    return $next($request);
}