怎么替换vendor中的代码? | laravel | laravel china 社区-江南app体育官方入口

dcat-admin 中扩展版本的代码不兼容php 8.3.2

   //文件  dcat\admin\extend\versionmanager;
    public function getnewfileversions($name, $version = null)
    {
        $name = $this->manager->getname($name);
        if ($version === null) {
            $version = static::no_version_value;
        }
        $versions = $this->getfileversions($name);
        $position = array_search($version, array_keys($versions));
        if ($position === false) {
            return $versions;
        }
        // $position   不兼容php8.3.2
        return array_slice($versions, $position);
    }

这个是dcat-admin 扩展的代码,正常情况是将dcat-admin 自己打一个composer包,在自己的composer 包上面修改,有点麻烦,有没有直接在项目中代码中替换这个方法的方案?

从零开发一个电商项目,功能包括电商后台、商品 & sku 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
以构建论坛项目 larabbs 为线索,展开对 laravel 框架的全面学习。应用程序架构思路贴近 laravel 框架的设计哲学。
最佳答案

file 在 composer.json,autoload 下加 classmap。 将修改后的文件路径写入其中。后运行 composer install。

4周前
讨论数量: 12

在 composer.json 中添加一个钩子脚本,在每次加载 composer 的自动加载器时运行。可以用来修改文件内容。例如:

"scripts": {
    "post-autoload-dump": [
        "php scripts/patch-vendor.php"
    ]
}

创建 scripts/patch-vendor.php,用 php 代码自动替换目标行:


$file = __dir__ . '/../vendor/target/package/target-file.php';
$content = file_get_contents($file);
// 替换目标代码
$updatedcontent = str_replace('旧代码', '新代码', $content);
file_put_contents($file, $updatedcontent);
echo "patched $file\n";

每次运行 composer install
或 composer update 后会自动应用修改。

1个月前
1个月前

不用那么麻烦,因为 php 中对于类定义来说,就是先到先得原则,换句话说,你只要把这个文件拷贝出来到自己的项目下,然后修改代码,最后在入口,比如 index.php 中 require 就好了。

当然,代价就是,你的关注一下更新,所以更建议给仓库提 pr。

1个月前

在 composer.json 中添加一个钩子脚本,在每次加载 composer 的自动加载器时运行。可以用来修改文件内容。例如:

"scripts": {
    "post-autoload-dump": [
        "php scripts/patch-vendor.php"
    ]
}

创建 scripts/patch-vendor.php,用 php 代码自动替换目标行:


$file = __dir__ . '/../vendor/target/package/target-file.php';
$content = file_get_contents($file);
// 替换目标代码
$updatedcontent = str_replace('旧代码', '新代码', $content);
file_put_contents($file, $updatedcontent);
echo "patched $file\n";

每次运行 composer install
或 composer update 后会自动应用修改。

1个月前

自己写个类继承他,然后用composer引入,你用新的类就行了

1个月前

感觉可以在自己的项目目录下写一个类,继承这个类,然后重写这个方法,想办法将自定义的类加载到对应的框架或者对象中去

4周前

composer有那个classmap可以实现 每次autoload时用你的文件替换vendor的某一个文件。

4周前

file 在 composer.json,autoload 下加 classmap。 将修改后的文件路径写入其中。后运行 composer install。

4周前

还好hyperf有个class map :heart_eyes:

4周前
3周前

fork仓库,修改代码,composer 依赖改成fork的仓库

3周前
    "autoload": {
        "files": [
            "overwriteclass/phinx/util.php",
            "overwriteclass/phinx/mysqladapter.php",
            "overwriteclass/phinx/adapterfactory.php",
            "overwriteclass/think/queue/listener.php"
        ]
    }
composer dump-autoload
1周前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!
网站地图