【问题标题】:class name not found in middleware method - Laravel 5在中间件方法中找不到类名 - Laravel 5
【发布时间】:2015-03-21 04:29:43
【问题描述】:

我正在尝试设置中间件。 我遵循了这些说明:

http://mattstauffer.co/blog/laravel-5.0-middleware-filter-style

我的代码是

<?php namespace App\Http\Middleware;

use Closure;
use Illuminate\Http\RedirectResponse;

class LoadVars {

$comingevents = App\Number::where('item','events')->get(array('quantity'));

我收到了这个错误:

LoadVars.php 第 24 行中的 FatalErrorException: 找不到类“App\Http\Middleware\App\Number”

在模型中,当我定义关系时,我使用 App\Number 并且效果很好。

在中间件方法中使用类的正确方法是什么?

【问题讨论】:

  • 您已经通过在其前面加上反斜杠来指定绝对命名空间:\App\Number,否则它将相对于您当前所在的命名空间(App\Http\Middleware)进行解释。或者您可以在顶部使用use App\Number;,然后使用Number::where(...); 访问它
  • 感谢您的提示。它帮助我了解新的 L5 命名空间规则。

标签: php class laravel middleware laravel-5


【解决方案1】:

正如@Quasdunk 在 cmets 中指出的那样,当您引用开头没有反斜杠的类时,路径是relative
这意味着App\Number 将在当前命名空间中查找App,然后是Number

App\Http\Middleware  &  App\Number   =>  App\Http\Middleware\App\Number

您只需在开头添加一个\,路径将被解释为绝对,实际上您使用该类的位置并不重要从哪里

App\Http\Middleware  &  \App\Number  =>  App\Number
Foo\Bar              &  \App\Number  =>  App\Number

如果您希望您的代码更简洁,您还可以使用 use 语句导入该类:

use App\Number;

class LoadVars {
    // ...
    $comingevents = Number::where('item','events')->get(array('quantity'));
    // ...
}

注意use 语句不需要反斜杠。所有路径都是绝对路径。

【讨论】:

  • 是的,@Quasdung 把我推向了正确的方向,后来我学会了在控制器的头部声明类。非常感谢你们!
猜你喜欢
  • 2015-06-19
  • 2015-09-23
  • 2016-03-08
  • 2015-09-15
  • 1970-01-01
  • 2015-05-30
  • 2015-04-09
  • 1970-01-01
相关资源
最近更新 更多