我正在做Laravel 10项目,我想在运行composer install时向数据库添加一些数据<package_name>。为此,我创建了一个自定义PHP文件,并在composer.json文件中调用postPackageInstall函数。
下面是我如何将其添加到composer.json文件中的
{
<-- OTHER COMPOSER JSON DATA -->
"scripts": {
"post-package-install": [
"Widgets\\PackageInstaller::postPackageInstall"
]
},
<-- OTHER COMPOSER JSON DATA -->
}
字符串
这里是我的自定义PHP文件的样子。
<?php
namespace Widgets;
use Composer\Installer\PackageEvent;
use Composer\Script\Event;
use Illuminate\Support\Facades\DB;
class PackageInstaller
{
protected static $packageName = "";
public static function postPackageInstall(PackageEvent $event)
{
// Get installing package
$operation = $event->getOperation();
$package = method_exists($operation, 'getPackage')
? $operation->getPackage()
: $operation->getInitialPackage();
DB::table('widgets')->insert(['name' => $package->getName()]);
}
}
型
在这里,我的想法是在运行composer install命令后获取软件包名称并将其存储在数据库中。但问题是,它会抛出错误
In Facade.php line 350:
A facade root has not been set.
型
我认为这是因为Laravel在这个阶段没有完全加载。另外,我尝试在post-package-install脚本中运行Artisan命令。DB查询在命令中工作,但我无法在命令中获得包名。
有没有其他方法可以解决这个问题或解决这个问题?
3条答案
按热度按时间htrmnn0y1#
你可以试试这个(使用Laravel
DB
facade):字符串
u5rb5r592#
1.使用DB逻辑创建一个自定义artisan命令。
1.允许通过CLI参数向其传递数据。
1.更新
postPackageInstall()
以通过exec()
运行命令。omjgkv6w3#
我是这样想的,因为Laravel在包卸载后的阶段还没有完全加载,所以我使用了行PHP数据库查询来存储数据。
字符串
这个方法并不干净。但它确实可以在Laravel的“post-package-uninstall”脚本中工作。