Laravel:
-
依赖注入实现原理
在使用laravel的时候,可以看到大量地使用了依赖注入。比如控制器中的HttpRequest对象,各种Model的实现类等等。这种实现方式的好处在于不需要再方法中频繁地new某些实例,实现模块的解耦。
依赖注入使用PHP反射API实现,通过容器实现依赖注入可以有选择性的加载需要的服务,减少初始化框架的开销。 -
常用集合方法
all()方法,转换为属性形式输出,返回集合表示的底层数组;
avg()方法返回平均值;
count()方法返回集合总数;
countBy()方法返回数值出现的次数或回调函数指定值出现的次数;
diff()方法返回集合数组之间不相同的部分,组合新的集合;
duplicates()返回重复的值;
first()返回成立后的第一个值;
flatten()将多维数组转换为一维;
get()通过键名找值;
has()判断集合中是否存在指定键;
pop()移出集合中最后一个值;
slice()返回指定值后续的集合;
sort()返回指定值后续的集合;
where()系列方法,和数据库条件一样;
each()迭代集合中的数据项并传递每个数据项到给定回调。 -
常用辅助函数
array_dot () 辅助函数允许你将多维数组转换为使用点符号的一维数组。
array_get() 函数使用点符号从多维数组中检索值。
route() 函数为指定的路由生成路由 URL。
dump() 函数会 dump 给定的变量,同时也支持同时传入多个变量。这对调试非常有用。
optional() 函数接受一个参数,你可以调用参数的方法或访问属性。 如果传递的对象为 null,则方法和属性将返回 null,而不是导致错误或抛出异常。
array_divide 函数返回两个数组,一个包含原始数组的键,另一个包含原始数组的值。
array_except 函数从数组中删除指定的键/值对。
array_first 函数返回数组中第一个通过指定测试的元素。
array_flatten 函数将多维数组平铺为一维数组。
array_only 函数仅返回给定数组中指定的键/值对。
array_plunk 函数从数组中检索给定键的所有值。
array_pull 函数返回并从数组中删除键/值对。
array_random 函数从数组中返回一个随机值。
env()
request()
app()
auth()
response() -
常用中间件
中间件分三类,分别是全局中间件、中间件组和指定路由中间件: -
全局中间件:
如果你想要定义的中间件在每一个 HTTP 请求时都被执行,只需要将相应的中间件类添加到 app/Http/Kernel.php 的数组属性 $middleware 中即可。
- 分配中间件到指定路由:
如果你想要分配中间件到指定路由,首先应该在 app/Http/Kernel.php 文件中分配给该中间件一个 key,默认情况下,该类的 $routeMiddleware 属性包含了 Laravel 自带的中间件,要添加你自己的中间件,只需要将其追加到后面并为其分配一个 key。
- 中间件组
有时候你可能想要通过指定一个键名的方式将相关中间件分到同一个组里面,这样可以更方便地将其分配到路由中,这可以通过使用 HTTP Kernel 提供的 $middlewareGroups 属性实现。Laravel 自带了开箱即用的 web 和 api 两个中间件组,分别包含可以应用到 Web 和 API 路由的通用中间件。
- CORS 中间件可以用于为离开站点的响应添加合适的头(跨域);
- 日志中间件可以记录所有进入站点的请求,从而方便我们构建系统日志系统。
- 认证中间件
- CSRF 保护中间件
- PHP生命周期
当我们请求一个php文件时,PHP 为了完成这次请求,会发生5个阶段的生命周期切换:
- 模块初始化(MINIT),即调用 php.ini 中指明的扩展的初始化函数进行初始化工作,如 mysql 扩展。
- 请求初始化(RINIT),即初始化为执行本次脚本所需要的变量名称和变量值内容的符号表,如 $_SESSION变量。
- 执行该PHP脚本。
- 请求处理完成(Request Shutdown),按顺序调用各个模块的 RSHUTDOWN 方法,对每个变量调用 unset函数,如
unset $_SESSION 变量。 - 关闭模块(Module Shutdown) , PHP调用每个扩展的 MSHUTDOWN
方法,这是各个模块最后一次释放内存的机会。这意味着没有下一个请求了。
- Laravel生命周期