我想根据用户设置切换 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);
}
当我访问该网站时,该代码有效(启用了功能)。
但是,这些动态启用功能的关联路由未注册,也不会显示在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
配置路由之前注入此代码。截至目前,我的代码是在包初始化之后执行的。