通过拓展类修改 function,避免暴力改写 vendor

好久好久没有时间写博客,也没时间弄 onemstar。

今天开 retrospective,其实有很多感触,有很多总经验可以总结,这样的锻炼机会也算是比较难得的,不过说实话,我又不是自虐狂,不想再搞得自己那么累。

我觉得可以做一个类比,我们做一个项目,就像准备一场年会,我们是主办方,节目虽然不是我们准备,但我们需要对节目的质量把关。

然后呢,其实参演节目的团队,他们并不 care 你这个年会到底是怎么筹划的,他们只关心跟自己相关的东西,比方啥时候进场,啥时候彩排。

但我们呢,就很想告诉他们,哎呀,我们为了让年会顺利进行,我们做了什么什么准备工作啦,谁谁谁莅临现场指导啦,取得了神马突破性进展啦。

人家不 care 好吗

扯远了……关于 laravel 中,拓展类的问题,其实是从 v2ex 的一个帖子里得到的启发。那个帖子吐槽 laravel 多么多么不好用,其中提到拓展很麻烦,结果自然是被 laravel 粉丝们群起而攻之。

事实上,这是一个好问题,我之前并没有想过。

为了实现某些功能,我还傻乎乎地去暴力修改 vendor 里面的 class,结果 composer update 之后就神马都没了,刚开始还以为是 git 出了问题,如今才醒悟过来,不能直接改 vendor 里的文件,会在 update 的时候被还原掉。

那怎么办呢,只能是在 Controller 里面,直接通过拓展类的方法修改 vendor 里面的 method。

比方 AuthController,我修改了 postLogin:

而事实上,这个 postLogin 的 method 继承于 AuthenticatesAndRegistersUsers,进一步又继承于 AuthenticatesUsers。

继承之后,再通过拓展类 AuthController 进行改写,这样就不会动到 vendor 里的文件,也就可以愉快地进行 composer update 了。

我解释清楚了么?其实很多时候往往是自己懂,但是说不明白,今天开会的时候就真的是在一个劲乱说啊,还好 EU team 的筒子们脑补能力比较强,不说了,洗洗睡去。

One Response to “通过拓展类修改 function,避免暴力改写 vendor

  • AuthenticatesAndRegistersUsers 和 ThrottlesLogins 是 Traits 吧,
    感觉使用性状用” 导入” 会比用” 继承” 解释得更容易让人理解

Leave a Reply

Your email address will not be published.

This site uses Akismet to reduce spam. Learn how your comment data is processed.