Spatie\Permission\Models\Role 是如何映射到 vendor/spatie/Laravel-permission/src/Models/Role.php 的
经常,我们都会使用use引入其他地方的类文件。但是有时use 后的命令空间结构和实际目录结构并不一致,这是怎么回事? 比如在config/administrator/roles.php中Spatie\Permission\Models\Role 是如何映射到 vendor/spatie/laravel-permission/src/Models/Role.php?
- 这个通过IDE可以直接跳转。
- 但是,原理是 PSR-4,结合此文和
vendor/spatie/laravel-permission/composer.json
中的如下代码:"autoload": { "psr-4": { "Spatie\\Permission\\": "src" }, }
- 可以看出,namespace 为
Spatie\Permission\
就相当于src
,那么Spatie\Permission\Models\Role
就是src/Models/Role.php
,由于这个是相对路径,加上composer.json的base directory
即vendor/spatie/laravel-permission
, 那么最后就拼接为vendor/spatie/laravel-permission/src/Models/Role.php
。 - 实际上,这个映射关系在
vendor/composer/autoload_psr4.php
中也可以找到:'Spatie\\Permission\\' => array($vendorDir . '/spatie/laravel-permission/src'),
- 分析完毕!
本帖已被设为精华帖!
本帖由系统于 5年前 自动加精
推荐文章: