Skip to content

NovaResourceProvider Incorrect Resource MappingΒ #132

@ZurabWeb

Description

@ZurabWeb

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.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions