下面由composer使用教程栏目为大家介绍让Composer的autoload支持自定义文件后缀名的方法,希望对需要的朋友有所帮助!
PHP的Composer工具规范了我们对系统各种资源库的加载格式,借助于PHP的自动加载机制,可以很大程度上简化在应用开发过程中的类库文件引用场景。但到目前为止,它有个不是问题的问题,就是文件后缀名只支持.php,而基于某些框架开发的旧资产,类文件的后缀名是.class.php,想使用Composer的自动加载规范,就不太纯粹了,一般要两者混着用,或者修改其他框架下的加载规则。
有没有省事点的解决办法呢?
首先只要能产生这么一个疑问,就赢了。而答案呢,多半能找到的。
Composer实现自动加载机制的代码非常简练,稍微看一下就能看懂。
当看到ClassLoader.php文件中的findFileWithExtension方法时参数里出现了一个$ext,也就看到希望。只要在适当的时机,能覆盖这个$ext参数就搞定。
其原始代码如下:
private function findFileWithExtension($class, $ext) { // PSR-4 lookup $logicalPathPsr4 = strtr($class, '\\', DIRECTORY_SEPARATOR) . $ext; $first = $class[0]; if (isset($this->prefixLengthsPsr4[$first])) { foreach ($this->prefixLengthsPsr4[$first] as $prefix => $length) { if (0 === strpos($class, $prefix)) { foreach ($this->prefixDirsPsr4[$prefix] as $dir) { if (file_exists($file = $dir . DIRECTORY_SEPARATOR . substr($logicalPathPsr4, $length))) { return $file; } } } } } // PSR-4 fallback dirs foreach ($this->fallbackDirsPsr4 as $dir) { if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr4)) { return $file; } } // PSR-0 lookup if (false !== $pos = strrpos($class, '\\')) { // namespaced class name $logicalPathPsr0 = substr($logicalPathPsr4, 0, $pos + 1) . strtr(substr($logicalPathPsr4, $pos + 1), '_', DIRECTORY_SEPARATOR); } else {
稍微修改一下:
autload_psr4.php 配置文件中,对应的格式变化:
return array( 'Qiniu\\' => array($vendorDir . '/qiniu/php-sdk/src/Qiniu’), // 字符串格式改为二维数组格式 ‘Liniu\\' => array([$vendorDir . ‘/Liniu/php-sdk/src/Liniu’, ‘.class.php']), );
贴出代码:
private function findFileWithExtension($class, $ext) { // PSR-4 lookup $logicalPathPsr4 = strtr($class, '\\', DIRECTORY_SEPARATOR); $first = $class[0]; if (isset($this->prefixLengthsPsr4[$first])) { foreach ($this->prefixLengthsPsr4[$first] as $prefix => $length) { if (0 === strpos($class, $prefix)) { foreach ($this->prefixDirsPsr4[$prefix] as $dir) { $_ext = $ext; $_dir = $dir; if (is_array($dir) && count($dir) == 2) { $_ext = $dir[1]; $_dir = $dir[0]; } if (file_exists($file = $_dir . DIRECTORY_SEPARATOR . substr($logicalPathPsr4 . $_ext, $length))) { return $file; } } } } } // PSR-4 fallback dirs foreach ($this->fallbackDirsPsr4 as $dir) { if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr4 . $ext)) { return $file; } } // PSR-0 lookup if (false !== $pos = strrpos($class, '\\')) { // namespaced class name $logicalPathPsr0 = substr($logicalPathPsr4 . $ext, 0, $pos + 1) . strtr(substr($logicalPathPsr4 . $ext, $pos + 1), '_', DIRECTORY_SEPARATOR); } else {
编码,有一种纯粹的乐趣。
以上是如何让Composer的autoload支持自定义文件后缀名的详细内容。更多信息请关注PHP中文网其他相关文章!

在开发基于Yii2框架的应用程序时,我遇到了一个常见但棘手的问题:如何高效地处理图片上传。用户常常需要上传各种格式和大小的图片,而我需要确保这些图片能被正确地处理和存储。尝试了多种方法后,我发现sergks/yii2-image-behavior这个扩展库能够完美地解决这个问题。

在最近的一次项目中,我需要快速部署一个基于SkeekSCMS的网站。由于时间紧迫,我必须找到一个高效的方法来完成这一任务。在尝试了几种不同的方法后,我发现使用Composer不仅简化了整个过程,还极大地提高了部署的效率。可以通过一下地址学习composer:学习地址

在最近的一个Magento2项目中,我遇到了一个挑战:需要在电商平台上灵活地管理和展示横幅广告。传统的横幅管理方式效率低下,且无法满足我们对REST和GraphQLAPI支持的需求。为了解决这个问题,我开始寻找一种高效且易于集成的解决方案,最终找到了Magepotato/module-banners这个库,它不仅解决了我的问题,还带来了意想不到的便利。

在开发一个需要频繁发送短信的Yii2项目时,我遇到了一个挑战:如何高效地管理不同的短信服务提供商(SMSproviders)并确保发送过程的可靠性和可扩展性。我尝试了多种解决方案,但都无法满足我的需求,直到我发现了jakharbek/yii2-sms这个库。它不仅解决了我的问题,还为项目带来了极大的便利。

在开发一个与Docker集成的PHP项目时,我遇到了一个棘手的问题:由于DockerAPI的版本更新,我的项目出现了兼容性问题。最初使用的DockerAPI版本是1.35,但Docker升级到了1.39,我的项目无法正常运行。我尝试了多种方法来解决这个问题,最终通过Composer找到了一个有效的解决方案。

在开发PHP项目时,我们经常会遇到一些重复的任务和复杂的流程,这些问题不仅耗费时间,还会影响开发效率。最近,我在开发一个项目时遇到了这样的困扰:需要频繁处理一些常见的开发任务,如字符串操作、日期处理等。虽然我尝试了多种方法,但始终感觉不够高效和简便。幸运的是,我发现了MOCUteis这个库,它不仅简化了开发流程,还大大提升了我的工作效率。

在开发LaravelAPI时,常会遇到权限管理、OAuth认证等复杂问题。我曾在一个项目中面临这样的挑战:需要快速搭建一个安全且易用的API系统。经过一番探索,我发现了code4mk/kapi这个库,它利用Composer轻松解决了我的问题。可以通过以下地址学习Composer:学习地址

在项目开发过程中,我们经常需要将数据实时推送至智能设备,以提供用户更好的体验。最近,我在尝试将GoogleAdSense的数据实时推送至LaMetric设备时,遇到了诸多挑战。传统的实现方式复杂且难以维护,直到我发现了dejurin/lametric-adsense这个库,通过Composer轻松解决了这个问题。


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

MinGW - 适用于 Windows 的极简 GNU
这个项目正在迁移到osdn.net/projects/mingw的过程中,你可以继续在那里关注我们。MinGW:GNU编译器集合(GCC)的本地Windows移植版本,可自由分发的导入库和用于构建本地Windows应用程序的头文件;包括对MSVC运行时的扩展,以支持C99功能。MinGW的所有软件都可以在64位Windows平台上运行。

SublimeText3 英文版
推荐:为Win版本,支持代码提示!

SublimeText3汉化版
中文版,非常好用

适用于 Eclipse 的 SAP NetWeaver 服务器适配器
将Eclipse与SAP NetWeaver应用服务器集成。

PhpStorm Mac 版本
最新(2018.2.1 )专业的PHP集成开发工具