laravel:Route :: group - 如何理解:: here的语法。因为Route类中没有静态函数`group`

时间:2016-09-25 09:44:49

标签: php laravel

在laravel中,我无法理解::对代码Route:groupRoute:get等的含义。

根据我的理解::用于使用类中的静态方法。

我检查了Route类。但是没有名为groupget的静态方法。那怎么理解。

当然,我不需要理解为了开始我的应用程序。但要理解语法总是好的。我正在使用phpstorm。一般来说,我可以找出函数和类的链接。我试图寻找未声明的groupget

1 个答案:

答案 0 :(得分:3)

当您使用Route::method()时,您正在使用名为" facade"的内容。 Route类是此上下文中的外观。

如果你看一下Illuminate\Support\Facades\Route,你会发现它提供了一个名为getFacadeAccessor的静态方法,它返回一个字符串router。它是一个引用IoC容器中Illuminate\Routing\Router类实例的字符串。

在它的设置过程中,Laravel会创建一个这个类的实例,并将其与router一起存储为类似键。

因此,当您执行Route::get(...)时,Laravel正在使用Facade访问器查找已创建的Router类的实例,并在其上调用get方法。它使用动态编程来实现这一目标,请查看Illuminate\Support\Facades\Facade类,了解其中发生的事情的详细信息,特别是__callStatic方法,它就是一切开始的地方。

所以,拨打Route::get()

  • 您实际上正在呼叫Illuminate\Support\Facades\Route::get
  • 该类或其扩展的Facade类不存在此类方法,因此运行__callStatic方法。
  • 基础Facade类调用static::getFacadeRoot()如果您遵循逻辑,则会为您提供Illuminate\Routing\Router
  • 的实例
  • 最后,__callStatic方法调用$instance->$method(...$args);,其中$instance是路由器的实例,$methodget$args是您传递给Route::get(...);
  • 的内容
  • 因此,当您致电Route::get('route', 'Controller@method');时,您实际上最终会在get('route', 'Controller@method')的实例上调用Illuminate\Routing\Router。请注意,您实际上并未调用静态方法。