首页 > 解决方案 > 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)));

标签: phplaravel

解决方案


通常,您会在控制器中使用以下代码来执行 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,
    ]);
}

推荐阅读