在laravel中,我无法理解::
对代码Route:group
或Route:get
等的含义。
根据我的理解::
用于使用类中的静态方法。
我检查了Route类。但是没有名为group
或get
的静态方法。那怎么理解。
当然,我不需要理解为了开始我的应用程序。但要理解语法总是好的。我正在使用phpstorm。一般来说,我可以找出函数和类的链接。我试图寻找未声明的group
或get
。
答案 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
是路由器的实例,$method
是get
,$args
是您传递给Route::get(...);
Route::get('route', 'Controller@method');
时,您实际上最终会在get('route', 'Controller@method')
的实例上调用Illuminate\Routing\Router
。请注意,您实际上并未调用静态方法。