如果继承和覆写 vendor 目录下的类?
如何需要对 vendor 下面某个package 进行修改?
简单来就讲,就是先自定义一个class 继承原本的class,再用自定义的class alias 回的原本来类
这个问题,已经有老外在 stackoverflow 里提问了,
stackoverflow.com/questions/530972...
回答中说的方法,我试了,是不行的。
目前我只能从vendor上复制class文件到自己的目录下,改namespace,自定义的类继承它,再 alias回原本的类来实现
大家有什么好的建议?
关于 LearnKu
修改其它包的源码吗?我之前简单的做法是将修改后的文件拷贝到自己的项目目录下(比如项目根目录),并加入版本库。然后在composer.json的scripts编写脚本命令进行原文件的替换。也可以加在post-install-cmd中(即 composer install之后替换该文件)。
stackoverflow上面的方法是依赖于容器的注入,当注入一个类的时候,容器会先根据绑定关系去实例化,如果找不到绑定关系,会丢给composer来处理,而composer加载原理是根据注册的命名空间查找的,两者加载机制不一样,你可以修改composer 注册的命名空间指定自己的类文件,利用composer.json的classmap把你用的包 fork一个出来,使用你fork修改后的包
适配器模式 应该可以满足你的需求
重写吧 可能真的
然后 找到了一个新方法
github.com/composer/composer/issue...
composer.json重写一个类,很简单,就继承
问题是,你这个类是如何被调用的,被实例化的,,,这点直接关系到,你重写的类,有没有用,,,
一般如果扩展包,考虑到这种情况,一个是可以通过配置文件,自定义某个处理类,或者使用容器解析类实例,,,