php - Laravel 护照安装在动态数据库上
问题描述
我正在为我的 laravel 应用程序中的每个客户注册创建数据库。我已经安装了授权护照。我已经成功创建了数据库并为护照运行了迁移。护照:安装命令不适用于新创建的数据库。有没有办法为我的新数据库运行命令护照:安装。
$this->info(sprintf("Dropping database if exists : %s", $dbName));
DBHelper::drop($dbName);
$this->info("Setting up database for client");
//Create migration table
Artisan::call("migrate:install", array(
"--database" => DBHelper::connect($dbName)
));
//Run migration
Artisan::call('migrate',
array('--path' => 'database/migrations/client',
'--database' => DBHelper::connect($dbName))); //DBHelper::connect($dbName) : Create new database config and then DB::reconnect()
//Install passport migration
Artisan::call('migrate', ['--path' => 'vendor/laravel/passport/database/migrations']);
//Install passport
Artisan::call('passport:install');
//Populate database
Artisan::call('db:seed',
array('--database' => DBHelper::connect($dbName)));
解决方案
通常,您会在控制器中使用以下代码来执行 Artisan 调用:
Artisan::call('passport:install'); 但是,这不适用于护照:安装,您将收到错误消息:
“passport”命名空间中没有定义命令
要解决此问题,您必须在 AppServiceProvider.php 的引导方法中添加以下代码:
<?php
namespace App\Providers;
use Laravel\Passport\Console\ClientCommand;
use Laravel\Passport\Console\InstallCommand;
use Laravel\Passport\Console\KeysCommand;
use Laravel\Passport\Passport;
use Illuminate\Support\Facades\Schema;
use Illuminate\Support\ServiceProvider;
class AppServiceProvider extends ServiceProvider
{
/**
* Bootstrap any application services.
*
* @return void
*/
public function boot()
{
Schema::defaultStringLength(191);
Passport::routes();
/*ADD THIS LINES*/
$this->commands([
InstallCommand::class,
ClientCommand::class,
KeysCommand::class,
]);
}