ITADN

NovaResourceProvider Incorrect Resource Mapping

#132OpenZurabWeb 创建于 2024-08-09
Z
ZurabWebcommented
When two resources use one model, the resource mapping only references the last one sorted alphabetically. `app/Models/UserModel.php`: ``` <?php namespace App\Models; use Illuminate\Database\Eloquent\Model; class UserModel extends Model {} ``` `app/Nova/UserOne.php`: ``` <?php namespace App\Nova; use Laravel\Nova\Http\Requests\NovaRequest; class UserOne extends Resource { public static $model = \App\Models\UserModel::class; public function fields(NovaRequest $request): array { return []; } } ``` `app/Nova/UserTwo.php`: ``` <?php namespace App\Nova; use Laravel\Nova\Http\Requests\NovaRequest; class UserTwo extends Resource { public static $model = \App\Models\UserModel::class; public function fields(NovaRequest $request): array { return []; } } ``` For the purposes of this test only, change the visibility of `\Parental\Providers\NovaResourceProvider::setNovaResources()` to public: ``` public function setNovaResources(): void ``` Tinker session without `NovaResourceProvider`: ``` > Nova::resourcesIn(app_path('Nova')); = null > resolve(\App\Models\UserModel::class); = App\Models\UserModel {#6907} > Nova::resourceForModel('App\Models\UserModel') = "App\Nova\UserOne" ``` Tinker session with `NovaResourceProvider`: ``` > Nova::resourcesIn(app_path('Nova')); = null > $provider = new \Parental\Providers\NovaResourceProvider(app()) = Parental\Providers\NovaResourceProvider {#6906} > $provider->setNovaResources() = null > resolve(\App\Models\UserModel::class); = App\Models\CancellationPolicy {#6922} > Nova::resourceForModel('App\Models\UserModel') = "App\Nova\UserTwo" ``` As you can see from the above example, when `NovaResourceProvider` is booted, it changes the resource mapping, resulting in unexpected behavior.
0 条评论