中间件中未找到Laravel 5 Class错误

xen*_*ish 5 php laravel laravel-5

在此输入图像描述我在laravel 5中创建了一个名为IpHitsCounter的中间件,它使用一个名为DeviceInfo的模型,它位于App\Models\FrontEnd中

<?php namespace App\Http\Middleware\FrontEnd;

    use Closure;
    use Request;
    use BrowserDetect;
    use App\Models\FrontEnd\DeviceInfo;
    use DB;

    class IpHitsCounter {

        /**
         * Handle an incoming request.
         *
         * @param  \Illuminate\Http\Request  $request
         * @param  \Closure  $next
         * @return mixed
         */
        public function handle($request, Closure $next)
        {
         DeviceInfo::create(['devices'=>$agentDevice,'deviceFamily'=>$deviceFamily]);
        }
Run Code Online (Sandbox Code Playgroud)

我的模型代码是:

<?php namespace App\Models\FrontEnd;

use Illuminate\Database\Eloquent\Model;

class DeviceInfo extends Model {

   /**
     * The database table used by the model.
     *
     * @var string
     */
    protected $table = 'client_device_infos';

    /**
     * The attributes that are mass assignable.
     *
     * @var array
     */
    protected $fillable = ['devices', 'deviceFamily'];



}
Run Code Online (Sandbox Code Playgroud)

这样做时,我收到以下错误: Class 'App\Models\FrontEnd\DeviceInfo' not found

虽然这个类仍然存在,但我收到了错误.

Sai*_*nce 16

我想你忘了注册了middleware.

打开文件 app/Http/Kernel.php

寻找$routeMiddleware酒店.

protected $routeMiddleware = [
    'Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode',
    'Illuminate\Cookie\Middleware\EncryptCookies',
    'Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse',
    'Illuminate\Session\Middleware\StartSession',
    'Illuminate\View\Middleware\ShareErrorsFromSession',
    'App\Http\Middleware\VerifyCsrfToken',
    'App\Http\Middleware\FrontEnd\IpHitsCounter' // your middleware
];
Run Code Online (Sandbox Code Playgroud)

更新1月28日,2016年8月28日

自Laravel 5.3.*发布以来,路由文件中有一些配置.5.3之前,只有1名为文件routes.php,但现在,有2个文件,web.php并api.php与这两个文件在内部项目的根目录中routes的文件夹.随意检查出来.

来到解决方案,您需要打开app/Http/Kernel.php并编辑$middlewareGroups具有密钥的密钥web.所以,它应该看起来像这样:

'web' => [
    \App\Http\Middleware\EncryptCookies::class,
    \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
    \Illuminate\Session\Middleware\StartSession::class,
    \Illuminate\View\Middleware\ShareErrorsFromSession::class,
    \App\Http\Middleware\VerifyCsrfToken::class,
    \Illuminate\Routing\Middleware\SubstituteBindings::class,

    \App\Http\Middleware\FrontEnd\IpHitsCounter::class // your middleware
],
Run Code Online (Sandbox Code Playgroud)

  • 这是一系列全球中间件.如果您将中间件放在那里,那么它将在每个HTTP请求中执行.点击这里http://laravel.com/docs/5.1/middleware#registering-middleware.这个答案是绝对错误的. (4认同)