laravel框架如何对vendor内部的class重构

举个简单的例子laravel框架中的migration功能

class Blueprint中集成了一个function timestamps 可以为数据库添加两个字段,不过会使用数据库格式为timestamp,想要改造一下这个function,例如我想要修改成如下:

public function timestamps($precision = 0)
    {
        $this->integer('created_at')->nullable();
        $this->integer('updated_at')->nullable();
        //或集成其他字段
    }

我尝试过
1.在class Blueprint中直接改,但是考虑到下次的composer update 就会将这个修改覆盖掉。
2.写一个继承,在继承内重构这个function,但是在执行 make:migation时报错
3.之前看到一个方法 用trial insteadof 不过好像得是 Blueprint 同为 trail才可以

想请问一下大家有什么方法可以解决!

阅读 2.6k
1 个回答

针对第二种方案,你可以在调用Schema::create()之前,先设置好你那个自定义的Blueprint

Schema::blueprintResolver(function($table, $callback, $prefix) {
    return new EnhancedBlueprint($table, $callback, $prefix);
});
Schema::create('xxx', function(Blueprint $table) {
    //这里的Blueprint实例实际上就是EnhancedBlueprint
});


----------
修改后

$schema = Schema::getFacadeRoot();
$schema->blueprintResolver(function($table, $callback, $prefix) {
    return new EnhancedBlueprint($table, $callback, $prefix);
});
$schema->create('xxx', function(Blueprint $table) {
});
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题