概述

从url到服务器处理信息再到服务器返回数据,浏览器渲染视图。这不到1秒的过程其实有不同的阶段,合起来就叫一个请求的生命周期。我们与服务器的交互就是由很多请求的生命周期来完成的。 学习请求的生命周期,就是学习程序在请求的不同阶段做了那些事情(涉及到那些重要文件),然后了解在合适的位置插入代码逻辑。

生命周期

启动阶段

public/index.php bootstrap/app.php 这两个文件,和所有程序一样,index.php是入口文件,不过它是放在public下的。
bootstrap/app.php这个文件是程序的核心,它会生成一个『容器』对象 $app; 关于什么叫容器,后面会讲,总之容器是Laravel架构的核心,先了解一下;

HTTP / Console Kernels(核心)

下面开始处理HTTP / Console请求的核心文件,怎么还有console?对,Laravel是支持命令行交互的。 核心文件的位置:

app/Http/Kernel.php
它继承了:

Illuminate\Foundation\Http\Kernel
打开这个Kernel.php看一下:

<?php
namespace App\Http;
use Illuminate\Foundation\Http\Kernel as HttpKernel;
class Kernel extends HttpKernel
{
/**

  1. * The application's global HTTP middleware stack.
  2. *
  3. * @var array
  4. */
  5. protected $middleware = [
  6. \Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode::class,
  7. \App\Http\Middleware\EncryptCookies::class,
  8. \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
  9. \Illuminate\Session\Middleware\StartSession::class,
  10. \Illuminate\View\Middleware\ShareErrorsFromSession::class,
  11. \App\Http\Middleware\VerifyCsrfToken::class,
  12. ];
  13. /**
  14. * The application's route middleware.
  15. *
  16. * @var array
  17. */
  18. protected $routeMiddleware = [
  19. 'auth' => \App\Http\Middleware\Authenticate::class,
  20. 'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
  21. 'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
  22. 'role' => \App\Http\Middleware\Role::class,
  23. 'like' => \App\Http\Middleware\LikeDislikeMiddleware::class,
  24. ];

}
从这里就可以看出它主要在管理什么了,这些都是中间件,上部分是全局的,下部分是命名的,单路由的。 里面就包括了错误处理,Session,CSRF防护等重要基础功能,用户自己新建的中间件也在这里绑定。

Service Providers(服务提供者)

Illuminate\Foundation\Http\Kernel 这个类还在背后默默的做了很多重要的基础工作,其中就包括启动Service Providers。

Service Providers的概念后面会详细讲,先说什么是服务,服务其实就是一个组件,再通俗点讲,composer里的一个package就是一个服务,有的地方把服务器称之为bundle, 或者Component。

config/app.php
这个文件是框架最重要的文件之一,composer的包使用前都要在这里绑定一下,也就是说服务需要在这里绑定一下才会被启动加载到。

服务不仅要加载,而且还要先注册一下,才能被使用,什么叫做注册呢?其实就是一个外部服务(包)和Laravel核心程序的连接行为,这个连接器就叫做Service Provider。

它们的位置位于:

app/Providers
Service Provider 里面一般有两个重要方法:boot()和register(); 前者是用来在启动前期加载一些程序逻辑。 注意,boot()非常常用,请记住 register()则是用来注册外部的服务。

Service Providers 和Service Container 有密切关系,这个后面会讲。

请求对象

有了Service Providers 和Service Container的帮助,Laravel在启动的时候就把用户请求封装成了一个对象(Request),这个对象有很多现成的方法,使请求处理变得异常强大。

来源于: http://laravelbase.com/collections/1/44

分类: web

标签:   larval   php