文章

Laravel项目的目录

Laravel项目的目录

Laravel目录

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
app(应用核心代码)
  Console()
    Kernel.php
  Exceptions()
    Handler.php
  Http()
    Controllers(控制器)
      Auth()
        ForgotPasswordController.php
      Controller.php
    Middleware(中间件)
      EncryptCookies.php
      RedirectlfAuthenticated.php
      VerifyCsrToken.php
    Kernel.php
  Providers()
  User.php
bootstrap(少许文件用于框架的启动和自动载入设置,cache文件夹用于包含框架生成的启动文件以提高性能)
  cache()
    .gitignore
    services.php
  app.php
  autoload.php
config(应用所有的配置文件)
  app.php
  auth.php
  broadcasting.php
  cache.php
  compile.php
  database.php
  filesystems.php
  mail.php
  queue.php
  services.php
  session.php
  view.php
database(包含了数据迁移及填充文件)
  factories()
    ModelFactory.php
  migrations(生成的迁移文件)
  seeds()
    DatabaseSeeder.php
  .gitignore
public(静态文件,View层|前端控制器和资源文件)
  css()
  js()
  .htaccess
  favicon.ico
  index.php
  robots.txt
  web.config
resources(资源文件,View层|视图文件以及原生资源文件,以及本地化文件)
  assets()
    js()
      components()
        Example.vue
      app.js
      bootstrap.js
    sass()
      _variables.scss
      app.scss
  lang()
    en()
      auth.php
      pagination.php
      passwords.php
      validation.php
  views(View层,模板文件)
    errors()
      503.blade.php
    shared()
      navbar.blade.php
    vendor()
      .gitkeep
    welcome.blade.php
routes(路由器)
  api.php
  console.php
  web.php
storage(编译过的Blade模板,基于文件的session,文件缓存,其他由框架生成的文件|app用于存放应用要使用的文件,framework目录用于存放框架生成的文件和缓存,logs文件包含应用的日志文件)
  app()
    public()
      .gitignore
    .gitignore
  framework()
    cache()
    sessions()
    views()
    .gitignore
  logs()
    .gitignore
    laravel.log
tests(自动化测试,一个开箱即用的PHPUnit示例)
  ExampleTest.php
  TestCase.php
vendor(Composer依赖)
.env-----------配置文件
.env.example---配置文件
.gitattributes-git文件
.gitignore-----git文件
artisan--------命令行工具
composer.json--Composer配置文件
composer.lock--Composer文件
gulpfile.js----gulp文件?
package.json---包依赖文件
phpunit.xml----?
readme.md  
server.php
yarn.lock

Laravel 5.1 官方文档中文版

第五章 架构

5.1 一次请求的生命周期

1
2
3
4
5
6
+public/index.php:
|
+bootstrap/app.php:载入Composer自动加载设置,创建服务容器实例
|
+HTTP/Console内核:根据请求的类型不同,分别交给HTTP内核和Console内核
|

HTTP内核
继承自Illuminate\Foundation\Http\Kernel类,定义了一个bootstrappers数组,数组中的类在请求前被执行,这些bootstarppers配置了错误处理,日志,检测应用环境以及其他在请求被处理前需要执行的任务。
该内核还定义了一系列在请求前需要经过的HTTP中间件,这些中间件处理HTTP会话的读写、判断应用是否处于维护模式、验证CSRF令牌等。
内核的标志性方法handle处理的逻辑相当简单:获取一个Request,返回一个Response。
服务提供者
内核启动最重要的动作之一就是为应用载入服务提供者,应用的所有服务提供者被配置在config/app.php配置文件的providers数组中。
首先,所有提供者的register方法被调用,然后,所有提供者被注册之后,boot方法被调用。
服务提供者负责启动框架的所有各种各样的组件,比如数据库,队列,验证器,以及路由器组件等。
分发请求
一旦应用被启动并且所有的服务提供者被注册,Request将会被交给路由器进行分发,路由器将分发请求到路由或者控制器,同时运行所有路由指定的中间件。
服务提供者
服务提供者是启动Laravel应用中最关键的部分,应用实例被创建后,服务提供者被注册,请求被交给启动后的应用进行处理。
对Laravel应用如何通过服务提供者构建和启动有一个牢固的掌握非常有价值。
应用默认的服务提供者存放在app/Providers目录下,该目录在默认情况下是空的,这里是添加自定义启动和服务容器绑定的最佳位置。
对大型应用,你可能希望创建多个服务提供者,每一个都有更加细粒度的启动。

5.2 目录

app目录 应用的核心代码位于app目录下,该目录位于命名空间App下,并且被Composer通过PSR-4自动载入标准自动加载。
可以通过Artisan命令app:name来修改该命名空间。
包含Console、Http、Providers等目录。
Console和Http目录提供了进入应用核心的API,HTTP协议和CLI是和应用进行交互的两种机制,但实际上并不包含应用逻辑。换句话说,它们只是两个向应用发布命令的方式。Console目录包含了所有的Artisan命令,Http包含了控制器、过滤器和请求等。
Jobs目录是放置队列任务的地方,应用中的任务可以被队列化,也可以在当前请求生命周期内同步执行。
Events目录是放置事件类的地方,事件可以用于通知应用其他部分给定的动作已经发生,并提供灵活的解耦处理。
Listeners目录包含事件的处理器类,处理器接收一个事件并提供对该事件发生后的响应逻辑,比如UserRegistered事件可以被SendWelcomeEmail监听器处理。
Exceptions目录包含应用的异常处理器,同时还是处理应用抛出的异常的好地方。
命名空间
应用默认的命名空间是App;可以使用’php artisan app:name xxxx’修改应用名称。
服务提供者
服务提供者是所有Laravel应用启动的中心,你自己的应用以及所有Laravel的核心服务都是通过服务提供者启动。
“启动”意味着注册事物,包括注册服务容器绑定、时间监听器、中间件甚至路由。
config/app.php中的providers数组存储着要加载的所有服务提供者类。
服务提供者的实现
所有的服务继承者继承自“Illuminate\Support\ServiceProvider”类,继承该抽象类要求至少在服务提供者中定义一个方法:register,在register方法内,你唯一要做的事情就是绑事物到服务容器,不要尝试在其中注册任何时间监听器,路由或者任何其他功能。通过’php artisan make:provider RiakServiceProvider’生成一个新的提供者
boot方法

本文由作者按照 CC BY 4.0 进行授权

热门标签