0

ユーザー設定に基づいて Fortify 機能を切り替えたい。

My/config/fortify.phpには、デフォルトで有効になっている基本的な機能セットがあります。

'features' => [
    Features::resetPasswords(),
    Features::updateProfileInformation(),
    Features::updatePasswords(),
],

残りの機能は、データベースの設定に基づいて動的に有効になります。

これが私のAppServiceProvider::boot()方法です:

public function boot()
{
    $features = (array)config('fortify.features');

    if (setting_bool('user_registration')) {
        $features[] = Features::registration();
    }

    if (setting_bool('verify_email')) {
        $features[] = Features::emailVerification();
    }

    if (setting_bool('two_factor')) {
        $features[] = Features::twoFactorAuthentication();
    }

    config()->set('fortify.features', $features);
}

Web サイトにアクセスすると、コードが機能します (機能が有効になります)。

ただし、これらの動的に有効化された機能に関連付けられたルートは登録されておらず、 には表示されませんartisan route:list

fortify/routes/routes.php、機能が有効になっている場合にのみルートを登録します。

if (Features::enabled(Features::emailVerification())) {
  // register the associated routes ...
}

if (Features::enabled(Features::twoFactorAuthentication())) {
  ...
}

動的に有効化された機能のルートを生成するにはどうすればよいですか?


更新 #1: コメントで提案されているように、コードをFortifyServiceProviderクラスに含めました。ルートは変更されません。コードをミドルウェアにも追加しましたが、まだうまくいきません。

laravel/fortifyルーティングを構成する前に、このコードを挿入する必要があるようです。今のところ、私のコードはパッケージの初期化後に実行されます。

4

0 に答える 0