我正在尝试覆盖一个包文件,因为它在没有修改的情况下是不能工作的,而且它还没有更新来修复这个问题。
Package为webklex\laravel-pdfmerger,文件为PDFMerger.php
在它里面有:
use fpdi\FPDI;为了让它正常工作,它需要:
use FPDI;显然,每当我使用composer更新时,这个文件当然是不正确的,在这个阶段,我必须手动进入并更改文件以使其正常工作。一定有更好的办法吗?
我试图复制git包,然后使用composer导入它并尝试覆盖,composer代码片段如下所示,但它没有完成我想要它做的事情。
{
"name": "laravel/laravel",
"description": "The Laravel Framework.",
"keywords": ["framework", "laravel"],
"license": "MIT",
"type": "project",
"repositories": {
"laravel-pdfmerger": {
"type": "package",
"package": {
"name": "****/laravel-pdfmerger-mirror",
"version": "1.1.1",
"source": {
"url": "https://bitbucket.org/****/laravel-pdfmerger-mirror.git",
"type": "git",
"reference": "origin/master"
}
}
}
},
"require": {
...
"****/laravel-pdfmerger-mirror": "1.1.1",
"webklex/laravel-pdfmerger": "1.1"
},
"autoload": {
"classmap": [
"database"
],
"psr-4": {
"App\\": "app/",
"VendorExtensions\\xerolaravel\\": "packages/vendorExtensions/xerolaravel",
"Webklex\\PDFMerger\\PDFMerger\\": "vendor/****/laravel-pdfmerger-mirror/src/PDFMerger"
}
},这里的任何帮助都是很好的。
-编辑
更新了我的composer.json文件以删除存储库,并将psr-4自动加载更改为以下内容:
psr-4": {
"App\\": "app/",
"VendorExtensions\\xerolaravel\\": "packages/vendorExtensions/xerolaravel",
"Webklex\\laravel-pdfmerger\\PDFMerger\\": "vendor/webklex/laravel-pdfmerger/src/PDFMerger"
}但是,每当我使用PDFMerger时,它仍然不会覆盖原始文件。是不是因为我用的是门面?
发布于 2019-08-22 14:52:14
您可以通过将编辑后的包放入vendor-custom目录并将其添加到composer.json的autoload部分来完成此操作。
"autoload": {
"psr-4": {
"App\\": "app/",
"Vendor\\Package": "vendor-custom/vendor/package"
}
},Gregwar psr-0示例:
"autoload": {
"classmap": [
"database"
],
"psr-4": {
"App\\": "app/"
},
"psr-0": {
"Gregwar\\Cache": "vendor-custom/gregwar/cache",
"Gregwar\\Image": "vendor-custom/gregwar/image",
"Gregwar\\ImageBundle": "vendor-custom/gregwar/image-bundle"
}
},发布于 2019-09-06 11:13:56
最终解决了这个问题……
1)在您的composer.json文件中导入Forked respository,但确保名称与您要替换的包的名称匹配;在我的示例中,webklex/laravel-pdfmerger,如下所示:
"repositories": {
"webklex/laravel-pdfmerger": {
"type": "package",
"package": {
"name": "webklex/laravel-pdfmerger",
"version": "1.1.1",
"source": {
"url": "url to git",
"type": "git",
"reference": "origin/master"
}
}
}
},注意:请确保您设置的版本高于原始包中当前可用的版本,因此在这里我添加了.1来区分更改,并将提交标记为this,这样我就可以选择它了。
2)需要包,但确保您请求的是您在提交中标记的版本:
"require": {
"php": ">=5.6.4",
"webklex/laravel-pdfmerger": "1.1.1"
},3)更新autoload,指向包的导入位置:
"autoload": {
"classmap": [
"database"
],
"psr-4": {
"App\\": "app/",
"Webklex\\PDFMerger\\": "vendor/webklex/laravel-pdfmerger/src"
}
},运行composer update,然后转储自动加载。
然后,您应该能够按照原始包中的说明在应用程序中引用该包。
发布于 2019-08-23 03:31:06
在PHP中,您实际上可以将一个类作为另一个类别名,且该行为包括名称空间。
这在遗留项目中非常有用,在这些项目中,您想要开始使用名称空间,但又不想重构上述类的所有用法。
这里正好相反,类是在名称空间中定义的,但您正在使用的类不在名称空间中,不过,给类设置别名也可以。
所以你可能要找的函数是class_alias。
下面是一个例子
<?php
class FPDI {
public function __construct() {
var_dump('I am FPDI');
}
}
class_alias('FPDI', 'fpdi\FPDI');
$noNamespace = new FPDI; // would, off course work
$namespace = new fpdi\FPDI(); // would work too, thanks to the class alias因此,如果你正在使用Laravel,你的工作应该和正确地给类赋予别名一样简单。
这实际上可以在定义providers and aliases的地方完成。
所以在config/app.php开始的时候
<?php
class_alias('FPDI', 'fpdi\FPDI');
return [
// all of the below array stays as you have it, it was just snipped for concision purpose
];https://stackoverflow.com/questions/57600844
复制相似问题