DEV Community

loading...

Target Class Does Not Exist In Laravel 8

Websolutionstuff
I am Laravel Developer. I have good knowledge of JavaScript, JQuery, Bootstrap and REST API.
Originally published at websolutionstuff.com ・2 min read

As you all know laravel 8 already released and you can see there are many changes and update in laravel 8 version. many laravel users are facing issue in their new Laravel 8 version when they try to load their routes in web.php and they run into an Exception that says something like "Target class [postController] does not exist".

Target Class Does Not Exist In Laravel 8

Upto Laravel 7, the RouteServiceProvider.php file had the below code:

here, namespace variable has stored 'App\Http\Controllers' and declered in middleware and prefix route as below.

protected $namespace = 'App\Http\Controllers';

protected function mapWebRoutes()
{
    Route::middleware('web')
        ->namespace($this->namespace)
        ->group(base_path('routes/web.php'));
}

protected function mapApiRoutes()
{
    Route::prefix('api')
        ->middleware('api')
        ->namespace($this->namespace)
        ->group(base_path('routes/api.php'));
}
Enter fullscreen mode Exit fullscreen mode

But, In laravel 8 the $namespace variable was removed and the Route declaration changed as below:

protected $namespace = null;

public function boot()
    {
        $this->configureRateLimiting();

        $this->routes(function () {
            Route::middleware('web')
                ->group(base_path('routes/web.php'));

            Route::prefix('api')
                ->middleware('api')
                ->group(base_path('routes/api.php'));
        });
    }
Enter fullscreen mode Exit fullscreen mode

Read Also : Dropzone Image Upload Tutorial In Laravel 6/7

So, Here is 2 different solution for target Class Does Not Exist.

1) Add namespace manually

In this process you need to add value/path in $namespace variable and you need to declare in route as well like below.

protected $namespace = 'App\Http\Controllers';

    public function boot()
    {
        $this->configureRateLimiting();

        $this->routes(function () {
            Route::middleware('web')
            ->namespace($this->namespace)
            ->group(base_path('routes/web.php'));

            Route::prefix('api')
                ->middleware('api')
                ->namespace($this->namespace)
                ->group(base_path('routes/api.php'));
        });
    }
Enter fullscreen mode Exit fullscreen mode

Now run again your app all codes are working fine without "Target Class Does Not Exist" error

2) Using Full Namespace in your Routes

In this solution you can use full namespace or changing all your route declarations like below code,

Route::resource('posts','App\Http\Controllers\PostController');
Enter fullscreen mode Exit fullscreen mode

Here you need to add full path of your controller.

Read Also : Laravel 8 CRUD Operation Example

Thanks for reading !!

Discussion (0)

Forem Open with the Forem app