了解Laravel路由中的一行代码


Understanding of a line of code in Laravel routing

在学习了过程之后,我试图在PHP中学习OOP,在学习了一些理论之后,我尝试将其应用于Laravel框架的使用。我在书中发现了这部分代码,用于路由,但我在OOP中并不能真正理解它。

如果我没有错的话,第一部分在我看来是一个"Route"类的静态方法,但后来我发现了第二部分'->where('id','[0-9]+');'这似乎是动态的,相对于一个实例,让我感到困惑。

有人能帮我理解吗?

Route::get('cats/{id}', function($id){
return "Cat #$id";
})->where('id', '[0-9]+');

If I'm not wrong, the first part seems to me a static method of a 'Route' class,对不起,您错了。实际上,Laravel为每个组件提供了Facade类,这里Route是底层Router类的Facade。这就是Facade类的样子:

<?php namespace Illuminate'Support'Facades;
/**
 * @see 'Illuminate'Routing'Router
 */
class Route extends Facade {
    /**
     * Get the registered name of the component.
     *
     * @return string
     */
    protected static function getFacadeAccessor() { return 'router'; }
}

您可能注意到,它只包含一个方法,并返回包含该方法的original/underlying类名,实际上它是key名称,用于将该类添加到IoC容器中。因此,Laravel在幕后,从IoC容器中创建一个Illuminate/Routing/Router.php类的实例,并调用method,这可能看起来不清楚,但有点棘手,不可能在这里回答更多细节,但您可以访问Laravel facade并获得更好的解释。

因此,最后,LaravelRouter.php类调用get()方法,并返回Route类/对象的一个实例,然后使用方法链接(PHP-5特性)调用Route类的where方法,仅此而已。阅读类的源代码,你会有更好的想法。

检查Illuminate'Support'Facades文件夹,您可以发现许多facade类,它们实际上是对其原始类/组件的包装。还要查看Laravel文档中的IoC容器,有必要对其有一个清晰的了解,以便使用Laravel框架。