博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
使用composer安装的laravel插件是如何被自动加载的
阅读量:3985 次
发布时间:2019-05-24

本文共 1159 字,大约阅读时间需要 3 分钟。

使用composer安装的laravel插件是如何被自动加载的

我自己也写过自动加载,主要思路是将类的命名空间和目录结构一一对应上,这样就很容易找到了,但是在laravel框架中,看到很多类的命名空间和目录完全不匹配,那么它们是怎么实现自动加载的呢?

public/index.php 中 require __DIR__.'/../vendor/autoload.php';于是依次排查到了__DIR__ . '/composer/autoload_real.php__DIR__ . '/composer/autoload_static.php

原来在 autoload_static.php 中将这些命名空间和其所在的目录做了一一对应,而最终的 autoload_static.php 是由全局的 vendor/composer/autoload_static.php 和当前项目的 vendor/composer/autoload_static.php 的合成。

而这些配置是由 composer require 命令 和 composer global require 来完成的。

我们以 Laravel/Envoy 插件为例。

composer global require "laravel/envoy"

插件被下载到了全局composer目录 D:\composer\vendor\laravel\envoy

它的目录结构为:

bin/src/composer.json...

在envoy的根目录下的 composer.json 中记录了它的依赖,以及自动加载

"autoload": {
"psr-4": {
"Laravel\\Envoy\\": "src/" }}

psr-4 是一种命名规范。意思是将命名空间以 Laravel\\Envoy\\ 开头的的类的自动加载定位到 laravel/envoy/src/

我们来打开全局 composer 目录下的 D:\composer\vendor\composer\autoload_static.php

在静态属性 $prefixDirsPsr4

'Laravel\\Envoy\\' => array (    0 => __DIR__ . '/..' . '/laravel/envoy/src',)

到这里就一目了然了。

所以很多时候,我们使用 composer 安装的插件可以很好的运行,但是如果是从 github 下载的插件直接放到vendor下却是无法加载的,原因也就在这里了,你还需要在对应的 autoload_static.php 中按照 composer.json 的配置来对应上。

转载地址:http://kzaui.baihongyu.com/

你可能感兴趣的文章
coursesa课程 Python 3 programming course_2_assessment_7 多参数函数练习题
查看>>
coursesa课程 Python 3 programming 排序函数sorted的可选参数
查看>>
coursesa课程 Python 3 programming course_2_assessment_8 sorted练习题
查看>>
visca接口转RS-232C接口线序
查看>>
在unity中建立最小的shader(Minimal Shader)
查看>>
RGB 立方体
查看>>
1.3 Debugging of Shaders (调试着色器)
查看>>
关于phpcms中模块_tag.class.php中的pc_tag()方法的含义
查看>>
vsftp 配置具有匿名登录也有系统用户登录,系统用户有管理权限,匿名只有下载权限。
查看>>
linux安装usb wifi接收器
查看>>
关于共享单车定位不准问题
查看>>
终于搞定CString和string之间转换的问题了
查看>>
用防火墙自动拦截攻击IP
查看>>
补充自动屏蔽攻击ip
查看>>
通信和通讯有什么区别?
查看>>
谷歌走了
查看>>
多线程使用随机函数需要注意的一点
查看>>
getpeername,getsockname
查看>>
让我做你的下一行Code
查看>>
浅析:setsockopt()改善程序的健壮性
查看>>