一、前言
如题所示,博主在下载laravel5.4
的Predis
扩展的时候遇到的错误,本来只是个composer
下载的报错,只是处理这个问题的时候,又遇到很多知识点,索性记录一下,也方便同样遇到这个问题的朋友们。
二、普通解决方案
经过各种搜索查询,网上普遍的解决方案主要是下面两种。
1、设置国内的下载源
有一部分前辈说这个问题是因为源地址的问题,换成国内的源即可解决。
composer config repo.packagist composer https://packagist.phpcomposer.com
这种方式确实能替换源地址,只不过对于博主来说并没有解决实际问题。
2、设置compoer缓冲大小
后续百度发现有人说是缓存问题,缓存大小是:cache-files-maxsize
(1)查看composer配置文件
composer config -l
[cache-ttl] 15552000
[cache-files-ttl] 15552000
[cache-files-maxsize] 300MiB (1073741824)
[bin-compat] auto
[discard-changes] false
[autoloader-suffix]
[sort-packages] true
[optimize-autoloader] true
[classmap-authoritative] false
[apcu-autoloader] false
缓存大小只有300M
,这么说来的话,如果更新的包比较大,还真有可能下载不下来,因此更给为1024M
试试。
(2)修改配置文件:
//修改缓存大小为1024MB
composer config --global cache-files-maxsize 1024MiB
其他的:
composer config --global data-dir /www/.composer
composer config --global cache-dir /www/.composer
修改的样式都是这样的,其实格式和更改源路径的时候差不多,只不过一时没想到,耗费了不少时间,这里需要注意格式是MiB
。另外,对博主来说,修改完之后还是下载扩展包失败,那就没办法了,只能祭出我的大杀器。
三、手动引入Predis下载包
博主用尽浑身解数加上等待composer
下载实在是浪费时间,无奈只好下载扩展包,然后通过composer
自动加载机制引入扩展包。只是想法很美好,原理很简单,实施很艰难呐。
1、下载predis的包
下载完成后,把包放到vendor
下面即可。
2、执行 composer dumpautoload
一般都是把扩展包放到vendor
之后,执行 composer dumpautoload
即可,但是博主这里执行之后,使用包的时候报错:
Class 'Predis\Client' not found
代表这个扩展包没有被框架自动加载。
3、修改composer.json,实现自动加载
既然要composer
自动加载不现实了,那咱们只能手动更改了。根据composer
自动加载规则,单独文件的话可以直接在autoload
里面的files
直接加上路径,比如一些函数文件等。
像咱们这种扩展包,需要在classmap
里面给出目录,然后执行composer dump-autoload
,自动加载才生效,它会把这个自动加载写入自动加载的配置文件中,这样我们的predis
扩展才能用的到。
感兴趣的话,可以去vendor/composer
中看看autoload_classmap.php
,我们会看到新增了predis
加载标准,这样在框架运行的时候,自然就能依据psr-4
自动加载规范找到咱们需要的方法。
"autoload": {
"classmap": [
"database",
"vendor/predis"
],
"psr-4": {
"App\\": "app/"
},
"files":[
"app/Helpers/functions.php"
]
},
4、执行 composer dumpautoload
执行命令之后,刷新,错误消失 ,可以正常获取存储的值了
四、总结
出现这个问题,本质上还是对于composer
的理解不够透彻,总以为下载个包就可以了,只是当这个包下载不下来的时候,我们又如何手动下载这个包,并把包通过autoload
加载进框架呢?composer
的自动加载部分如何添加,类的自动加载又要经过哪些步骤?这些都是我们要了解的知识,加油吧各位!
end
共同学习,写下你的评论
评论加载中...
作者其他优质文章