ユーザー設定に基づいて 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
ルーティングを構成する前に、このコードを挿入する必要があるようです。今のところ、私のコードはパッケージの初期化後に実行されます。