欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  后端开发

关于Laravel 全局数据的处理

程序员文章站 2022-05-19 07:51:05
...
laravel中, 我们可能通过中间件来处理auth信息, 也可能设计到一些业务逻辑的处理

这些数据在中间件中处理后, 应该存放到哪里?
比方说 userObject 这样的对象, 又或者只是一个变量. 后续的逻辑(service层, model层, view层)都可能用到.
那在中间件中获取,处理后的数据, 应该放在哪里. (一次请求中)

不使用框架时, 通常会随便定义一个超级变量 在存放. MVC中似乎不太建议使用全局变量来处理. 那在laravel中, 通常是放在哪里呢?

我知道可以存放在session app容器下. 但是感觉不是最佳的方案.

回复内容:

laravel中, 我们可能通过中间件来处理auth信息, 也可能设计到一些业务逻辑的处理

这些数据在中间件中处理后, 应该存放到哪里?
比方说 userObject 这样的对象, 又或者只是一个变量. 后续的逻辑(service层, model层, view层)都可能用到.
那在中间件中获取,处理后的数据, 应该放在哪里. (一次请求中)

不使用框架时, 通常会随便定义一个超级变量 在存放. MVC中似乎不太建议使用全局变量来处理. 那在laravel中, 通常是放在哪里呢?

我知道可以存放在session app容器下. 但是感觉不是最佳的方案.

中间件只是用来过滤请求/响应的管道,数据该存数据库那就上Eloquent或者直接用DB facade,该存session就存session......

存在内存中。比如当前用户,当你调用 Auth::user 或其他跟当前认证用户有关的代码时,就可能会触发对应的 UserModel 去取用户对象,如果本次 request 中还没有生成,就去从数据库或缓存中取然后一直存在本次请求的内存中。
所有其他的变量、provider、binding、依赖注入、别名等等都是这个逻辑。而且具有很灵活的加载方式,以提高性能。比如路由、配置的缓存和加载,比如defer。

这一套是基于 Laravel 的一个核心东西:容器(container)。官方文档都是最开始就讲了这些理念,文档见 Core Concepts

Laravel 可定制的 bootstrap 启动流程中,一般第一个就是加载 Application,这就是一个大容器。你可以在任意地方 dd(app()) 查看当前 app 中的数据加载情况。

相关标签: php laravel