laravel框架的学习笔记(一) 运行逻辑

1、laravel应用的入口文件都是public/index.php文件,所有请求都会被web服务器导向这个文件。这里是加载框架其它部分的起点。

index.php文件载入composer生成的自动加载设置,然后从bootstrap/app.php脚本获取Laravel应用实例,Laravel的第一个动作就是创建服务容器实例。

2、HTTP/Console内核

接下来,请求被发送到HTTP内核或者Console内核,这取决于进入应用的请求类型。这两个内核是所有请求要经过的中央处理器,现在,就让我们聚焦在位于app/Http/Kernel.php的HTTP内核。

HTTP
内核继承自 Illuminate\Foundation\Http\Kernel 类,该类定义了一个 bootstrappers 数组,这个数组中的类在请求被执行前运行,这些 bootstrappers 配置了错误处理、日志、检测应用环境以及其它在请求被处理前需要执行的任务。

HTTP
内核还定义了一系列所有请求在处理前需要经过的 HTTP 中间件,这些中间件处理 HTTP 会话的读写、判断应用是否处于维护模式、验证 CSRF
令牌等等。

HTTP
内核的标志性方法 handle 处理的逻辑相当简单:获取一个
Request,返回一个 Response,把该内核想象作一个代表整个应用的大黑盒子,输入 HTTP 请求,返回 HTTP 响应。

服务提供者

内核启动过程中最重要的动作之一就是为了应用载入服务提供者,应用的所有服务提供者都被配置。

在config/app.php配置未见的providers数组中。首先,所有提供者的register方法被调用,然后所有提供者被注册之后,boot方法就会被调用。

服务提供者负责启动框架的所有各种各样的组件,比如数据库、队列、验证器,以及路由组件等,正是因为他们启动并配置了框架提供的所有特性,服务提供者是整个
Laravel 启动过程中最重要的部分。

分发请求

一旦应用被启动并且所有服务提供者被注册,Request将会被交给路由器进行分发,路由器将会分发请求到路由或者控制器,同时运行所有路由指定的中间件。

     3、聚焦服务提供者

服务提供者是启动
Laravel 应用中最关键的部分,应用实例被创建后,服务提供者被注册,请求被交给启动后的应用进行处理,整个过程就是这么简单!


Laravel 应用如何通过服务提供者构建和启动有一个牢固的掌握非常有价值,当然,应用默认的服务提供者存放在app/Providers目录下。

默认情况下,AppServiceProvider 是空的,这里是添加自定义启动和服务容器绑定的最佳位置,当然,对大型应用,你可能希望创建多个服务提供者,每一个都有着更加细粒度的启动。

注意:由此可以看出,laravel的所有路径都是通过本身的路由器进行定义的,和tp,ci这些按照规则访问控制器是完全不一样的。

目录

根目录

新安装的
Laravel 应用包含许多文件夹:

app目录包含了应用的核心代码;

bootstrap目录包含了少许文件用于框架的启动和自动载入配置,还有一个cache文件夹用于包含框架生成的启动文件以提高性能;

config目录包含了应用所有的配置文件;

database目录包含了数据迁移及填充文件,如果你喜欢的话还可以将其作为
SQLite 数据库存放目录;

public目录包含了前端控制器和资源文件(图片、JavaScript、CSS等);

resources目录包含了视图文件及原生资源文件(LESS、SASS、CoffeeScript),以及本地化文件;

storage目录包含了编译过的Blade模板、基于文件的session、文件缓存,以及其它由框架生成的文件,该文件夹被细分为成appframeworklogs子目录,app目录用于存放应用要使用的文件,framework目录用于存放框架生成的文件和缓存,最后,logs目录包含应用的日志文件;

tests目录包含自动化测试,其中已经提供了一个开箱即用的PHPUnit示例;

vendor目录包含Composer依赖;

App目录

应用的核心代码位于app目录下,默认情况下,该目录位于命名空间
App 下,  并且被 Composer 通过 PSR-4自动载入标准 自动加载。你可以通过Artisan命令app:name来修改该命名空间。

app目录下包含多个子目录,如ConsoleHttpProviders等。ConsoleHttp目录提供了进入应用核心的API,HTTP协议和CLI是和应用进行交互的两种机制,但实际上并不包含应用逻辑。换句话说,它们只是两个向应用发布命令的方式。Console目录包含了所有的Artisan命令,Http目录包含了控制器、中间件和请求等。

Jobs目录是放置队列任务的地方,应用中的任务可以被队列化,也可以在当前请求生命周期内同步执行。

Events目录是放置事件类的地方,事件可以用于通知应用其它部分给定的动作已经发生,并提供灵活的解耦的处理。

Listeners目录包含事件的处理器类,处理器接收一个事件并提供对该事件发生后的响应逻辑,比如,UserRegistered事件可以被SendWelcomeEmail监听器处理。

Exceptions目录包含应用的异常处理器,同时还是处理应用抛出的任何异常的好地方。

注意:app目录中的很多类都可以通过Artisan命令生成,要查看所有有效的命令,可以在终端中运行php
artisan list make
命令。

时间: 2024-08-03 15:25:28

laravel框架的学习笔记(一) 运行逻辑的相关文章

Mina框架的学习笔记——Android客户端的实现

Apache MINA(Multipurpose Infrastructure for Network Applications) 是 Apache 组织一个较新的项目,它为开发高性能和高可用性的网络应用程序提供了非常便利的框架.当前发行的 MINA 版本支持基于 Java NIO 技术的 TCP/UDP 应用程序开发.串口通讯程序(只在最新的预览版中提供),MINA 所支持的功能也在进一步的扩展中.目前正在使用 MINA 的软件包括有:Apache Directory Project.Asyn

node.js框架StrongLoop学习笔记(一)

node.js框架StrongLoop学习笔记(一) 本人在用node.js做手机后台,查找框架发现StrongLoop挺适合,可是却发现没有中文教程,于是在自己学习时,做一下笔记,以方便其他像我一样的人参考(本人的英语水平非常差,只能一点点试着做,并记录下来,如果大家发现问题,请通知我好更正,谢谢了!).所有操作都是在CentOS7-x64,Node.js 0.12.2下完成的. nodejs框架StrongLoop学习笔记一 安装StrongLoop 创建项目 安装数据库驱动 配置数据库连接

php Laravel安装教程学习笔记

在一切环境就绪了,当然就要开始了解框架了. 站在巨人的肩膀上,学东西会事半功倍.我在网上找到一篇好文章,正好可以让我轻松了解Laravel应用程序的体系结构.因此借来直接用了. 该章节内容翻译自<Architecture of Laravel Applications>,一切版权为原作者,由于原作者写这篇文章时Laravel版本还没有到4.1,一些地方有稍微差别,我会稍作修改. 原作者:Stable Host, LLC(不知道找对了没有) 翻译作者:Bowen Huang 正文: Larave

[Laravel 5 教程学习笔记] 一、Windows下安装Laravel 5

最近看到一些统计,说是Laravel是目前PHP框架中使用最多的,所以就想来学习下.之前其实也想过学习这个框架,但是每次到第一步安装的时候就卡住了,无奈  .之前用ThinkPHP的时候,下载完放到网站目录下就可以用,这个却还要折腾很多别的东西.今天终于安装成功了,原来安装挺简单的,记录下步骤~ 一.安装前的准备工作 1. 配置PHP环境 首先需要配置PHP运行环境,这里我直接使用的是WampServer集成包.由于Laravel 框架有一些系统上的需求,所以推荐大家下载一个较高的版本,以满足下

【MUI框架】学习笔记整理 Day 1

MUI 框架之 [原生UI] (1)accordion(折叠面板) 由二级列表演化而来 1 <ul class="mui-table-view"> 2 <li class="mui-table-view-cell mui-collapse"> 3 <a class="mui-navigate-right" href="#"></a> 4 <div class="m

Android Mina框架的学习笔记

Apache MINA(Multipurpose Infrastructure for Network Applications) 是 Apache 组织一个较新的项目,它为开发高性能和高可用性的网络应用程序提供了非常便利的框架.当前发行的 MINA 版本支持基于 Java NIO 技术的 TCP/UDP 应用程序开发.串口通讯程序(只在最新的预览版中提供),MINA 所支持的功能也在进一步的扩展中.目前正在使用 MINA 的软件包括有:Apache Directory Project.Asyn

jfinal框架教程-学习笔记

JFinal  是基于 Java  语言的极速  WEB  + ORM  开发框架,其核心设计目标是开发迅速.代码量少.学习简单.功能强大.轻量级.易扩展.Restful.在拥有Java 语言所有优势的同时再拥有 ruby.python.php 等动态语言的开发效率!为您节约更多时间,去陪恋人.家人和朋友!(鼓掌!~~) JFinal 有如下主要特点: ?  MVC 架构,设计精巧,使用简单 ?  遵循 COC 原则,零配置,无 xml ?  独创 Db + Record 模式,灵活便利 ? 

分页框架pager-taglib学习笔记

下面的笔记来自于孔浩老师的视频教程和我自己的开发实践. 使用Pager-taglib可以帮助我们快速开发分页处理. pager-taglib-2.0.war这是我们第1次直观地认识jar包.直接放到tomcat的webapp目录下面,就可以启动项目,查看帮助文档.说明:拷贝完之后,可以改一个名字,方便我们写访问的路径.使用的步骤:(1)将相应包拷贝到lib目录(pager-taglib.jar),另外一个是源码包,貌似可以不拷贝,我还没试过.(2)在jsp页面引入相应的分页标签库.引入标签 pr

Python爬虫框架Scrapy 学习笔记 8----Spider

什么是爬虫? 从逻辑角度讲,爬虫对应一个树.树枝是网页,树叶是感兴趣的信息. 当我们从一个URL出发查找感兴趣的信息时,当前URL返回的内容可能包含我们感兴趣的信息,也可能包含另一个可能包含我们感兴趣的信息的URL.一个爬虫对应一次信息搜索,信息搜索过程会建立起一棵树. scrapy.Spider这个类提供了接口,允许我们设计整个信息搜索的流程. 给spider传递运行时所需的参数.比如URL ?号后面的参数信息.这些信息可以选择使用crawl -a 命令传递 2. Spider循环 对spid