NovaResourceProvider Incorrect Resource Mapping
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 条评论