位置: 编程技术 - 正文

Laravel学习教程之路由模块(laravel视频教程)

编辑:rootadmin

推荐整理分享Laravel学习教程之路由模块(laravel视频教程),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:laravel 入门教程,laravel怎么学,laravel入门与实战,laravel怎么学,laravel技巧,laravel learnku,laravel视频教程,laravel入门与实战,内容如对您有帮助,希望把文章链接给更多的朋友!

前言

本文主要给大家介绍的是关于Laravel路由模块的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧。

备注:本文是基于Laravel 5.4版本的路由模块代码进行分析书写;

模块组成

下图展示了路由模块中各个文件的关系,并进行简要说明;

剖析

服务提供者

看Laravel模块,首先找ServiceProvider文件,这是模块与IOC容器交互的入口,从这个文件,可以看出该模块提供向系统提供了哪些服务;

路由管理

“路由管理”服务有以下元素需要了解:

Route:路由;会记录 Url、Http 动作、Action (路由要执行的具体对象,可能是 Closure,也可以是某个 Controller 中的方法),路由参数,路由参数的约束; RouteCollection:路由集,用来存储所有Route对象的“盒子”; RouteGroup:路由组;只有路由注册过程中会临时用到;存储一批路由公共的一些属性,属性包括domain、prefix、as、middleware、namespace、where; Resource:资源路由;资源路由是一套路由的统称,包含列表(index)、显示增加(create)、保存增加(store)、显示详情(show)、显示编辑详情(edit)、更新编辑(update)、删除详情(destory);同时可以通过调用only或except方法或参数的形式只生成部分路由; Action:路由要执行的对象;有两种表现形式,一是Closure函数,二是类似['uses' => 'FooController@method', 'as' => 'name']这样的字符串;对于不同的表现形式,路由在执行时会调用不同的处理;

注册流程

在项目启动后,会执行所有ServiceProvider的loadRoutes方法,也就是调用map方法,一般情况下map方法如下

这时候,项目就会执行很多Route::get、Route::post、Route::group方法;

当遇到Route::group方法时,会实例化一个RouteGroup对象,put进Router管理类的路由组栈头部;而后当执行get、post这类具体的注册路由方法时,会把当前路由组栈中所有组的属性合并进新路由中,将新路由存储在RouteCollection这个大盒子里;当Route::group的Closure执行完毕时,会把头部的RouteGroup实例pull出去;

当执行Route::resource时,Router管理类会调用ResourceRegister类来完成批量注册路由;

对于 Router::get这类注册方法,IlluminateFoudationhelpers提供了简写;

Router::get 简化成 get, Router::post 简化成 post, Router::put 简化成 put, Router::patch 简化成 patch, Router::delete 简化成 delete, Router::resource简化成 resource,

至此,RouteCollection大盒子就存放了所有要注册的路由;

request 请求匹配流程

首先,request请求会经过Foundation/Http/Kernel的handle方法,在这个方法中,请求会执行以下语句

这里的$this->router,就是Router管理类;dispatch方法如下

1、根据请求找匹配的路由

`RouteCollection`根据请求的`http`动作缩小要匹配的路由范围;在筛选出来的这些路由中依次遍历,找出第一个符合验证的路由(需要进行较验的验证在`Route`中的`getValidators`方法中声明);

2、将路由绑定到请求上

3、触发RouteMatched事件

初始化的`Laravel`项目没有对`RouteMatched`路由匹配事件进行任何的监听器绑定,如有需要,可以自定义监听器,在模块的`EventServiceProvider`中注册该事件监听;这样一旦请求匹配上某个路由,就可以执行自定义方法了;

4、通过 Pipeline 流水线执行路由上绑定的中间件及对应的方法

在`runRouteWithinStack`方法中,系统会判断是否需要执行中间件,如果`IOC`容器中设置了`middleware.disable`的值为`true`,则需要执行的中间件数组为空;否则会找到所有的中间件,并按照`middlewarePriority`对必要的一些中间件进行排序调整;然后执行`$route->run()`方法;

5、根据 request 请求设置 response 的响应头

项目中会用到的一些方法

获取路由集合 app('router')->getRoutes() 获取当前的请求 $request = app('router')->getCurrentRequest() 获取当前请求所对应的路由 $route = $request->route() 或 $route = app('router')->getCurrentRoute() 获取当前路由需要执行的中间件 $middlewares = app('router')->gatherRouteMiddleware($route)

Url 生成器

Url 生成器是什么?

举个例子,

像这种基于当前请求,生成指定路径的Url;

这部分功能由两个文件完成,一个是UrlGenerator.php,另一个是RouteUrlGenerator.php;UrlGenerator.php处理根据路径名生成Url,RouteUrlGenerator.php处理根据路由生成Url;

列一些常用的使用:

根据路径名生成

使用to方法,第一个参数为路径,第二个参数是数组,implode后会接着路径名,第三个参数决定用不用https

根据路由的 as 名生成

Laravel学习教程之路由模块(laravel视频教程)

使用route方法,第一个参数为指定路由的 as 名,第二个参数是参数数组,第三个参数决定是否显示根目录(默认为 true)

根据路由的 action 名生成

使用action方法,第一个参数为指定路由的 action 名,第二个参数是参数数组,第三个参数决定是否显示根目录(默认为 true)

设置全局默认参数

设置全局命名空间

这样调用的时候,不用在 action 上省略这部分命名空间

跳转器

跳转器内部提供了以下跳转;

home

通过调用app('redirect')->home()会跳转至根目录下;

back

通过调用app('redirect')->back()会跳转至上一次访问页面;或者全局帮助函数back()也可以;

第三个参数表示,如果没有前一次访问请求,访问哪个页面,具体源码如下:

refresh

通过调用app('redirect')->refresh()会刷新当前访问页面;

to

通过调用app('redirect')->to('path')会跳转至指定路径页面;或者全局帮助函数redirect('path')也可以;

这里的 path 路径是不包含根目录的,例如(foo/bar);

第四个参数表示是否使用https;

away

通过调用app('redirect')->away('path')会跳转至指定路径页面;

这里的 path 路径是包含根目录的,例如( ,根据路由的as名会跳转至与路由一致的url路径页;

action

通过调用app('redirect')->action('route_action') ,根据路由的action名会跳转至与路由一致的url路径页;

guest

跳到指定的路径页的同时,将当前url存放至session中,键名为url.intended;

intended

跳转至session中键名为url.intended的值所对应的Url;如果不存在,则跳转至第一个参数所传的值;

响应工厂(ResponseFactory)

ResponseFactory文件提供了两部分 API,分别是与响应类型相关和与跳转相关;

响应

response()会返回ResponseFactory实例;

视图响应

Jsop响应

Jsonp响应

文件响应

直接在浏览器显示文件,而不是下载,例如图片或PDF;file方法第一参数为文件路径,第二参数选填为头信息数组;

文件下载

download方法第一参数为文件路径,第二参数选填为文件名,第三参数选填为头信息数组;

跳转

这里的跳转方法,其实调用的还是跳转器中的方法,不过是在暴露更多的接口,方便调用与使用;

方法名 调用 实际调用的是跳转器中的哪个方法 redirectTo response()->redirectTo(...) to方法 redirectToRoute response()->redirectToRoute(...) route方法 redirectToAction response()->redirectToAction(...) action方法 redirectGuest response()->redirectGuest(...) guest方法 redirectToIntended response()->redirectToIntended(...) intended方法

总结

标签: laravel视频教程

本文链接地址:https://www.jiuchutong.com/biancheng/289908.html 转载请保留说明!

上一篇:Django中的cookie与session操作实例代码(django cookie)

下一篇:PDO操作MySQL的基础教程(推荐)(pdo_mysql)

  • 年度所得税汇算清缴操作流程
  • 递延所得税负债转回怎么理解
  • 增值税发票选择确认平台是什么?
  • 申报社保不报个人账户
  • 老板故意拖欠税款怎么办
  • 财务往来账对账制度
  • 税务筹划的12种方法知乎
  • 偶然所得申报期限
  • 企业资产折旧抵扣所得税
  • 退回多打货款分录
  • 票据的融资
  • 转让不动产增值税纳税义务发生时间
  • 所得税汇算清缴退税会计分录怎么做
  • 资产负债表中无形资产是原值还是净值
  • 营业外收入在资产负债表怎么填
  • 进口材料海关到港
  • 低价股权转让是利空还是利好
  • 营改增后发票报销管理规定是怎样的?
  • 工资薪金税前扣除比例
  • 增值税税控系统技术维护费计入什么科目
  • 体现公司财务状况的报表
  • 股权取得
  • 外购商品对外赠送增值税怎么算
  • 收到员工补缴的公积金怎么入账
  • 汽车罚款怎么进账
  • 工资上浮20%怎么算
  • 做账的是什么会计
  • 代扣代缴境外增值税可以抵扣
  • 收到利息收入会计分录怎么写
  • 银行存款收款凭证属于什么凭证
  • 维修是几个点的税率
  • 上月材料入库会计分录
  • 法人借给公司钱怎么备注
  • 事业单位年末收入怎么算
  • 资产收购的账务处理
  • 房贷每月利息如何算
  • php getheader
  • 财政拨款结转的明细科目中,年末结转后有余额的是
  • 高新技术企业税率15%
  • 一般经营循环资金周转量为负数
  • php中哪个命令用来删除当前目录
  • 进项税额大于销项税额会计分录
  • php生成证书图片
  • 商业企业常用会计科目
  • dpkg-configure-a
  • 劳务派遣应如何签合同
  • 公司租个人房屋交什么税
  • 会计在建工程属于什么科目
  • 跨省市提供建筑服务
  • 补缴以前年度附加税怎么申报
  • 金蝶做账流程视频
  • ip地址跳转域名
  • 企业固定资产折旧可以按照其价值和使用情况
  • 补办理营业执照需要什么材料
  • 总资产报酬率的高低直接影响净资产收益率的高低
  • 损益类科目全部科目
  • 知识产权申请如何申请
  • 先开发票后付款如何记账?
  • 提交免税申请
  • 账户利息计入什么科目
  • 其他应付款转实收资本走什么程序
  • 商业银行的固定资产
  • sql比较数值大小
  • 电脑安装win8系统
  • u盘安装ubuntu找不到硬盘
  • windows全局搜索快捷键
  • win10系统怎么锁定屏幕
  • Win10 Mobile RedStone 14283已修复与已知问题汇总
  • Lesson02_04 表单标签(2)
  • 天干地支在择时中的应用初探
  • linux 批量修改
  • python,for循环
  • js动态生成html页面
  • gps坐标计算距离公式工具
  • 联华超市华联超市哪个厉害
  • linux显示中文
  • 增值税一般纳税人和小规模纳税人的区别
  • 大连税务局王局长
  • 北京地税咨询热线
  • 建筑企业所交的税项有多少
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设