0

I try to create routes to my index.blade.php page, i've made a controller "ProductController" using cmd php artisan make:controller ProductController, so in http --> Controllers i do have a ProductController.php file and i put this code in it :

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

class ProductContoller extends Controller
{
    public function index()
    {
        return view('products.index');
    }
}

and then in my web.php i create a route using this code

Route::get('/boutique', 'ProductController@index');

However it doesn't work.

Firstly, when i go to the pretty url i've setup for my project at localhost using Laragon --> Projetname.test i get the normal Laravel Welcome page, but when i try to go to the url i've just setup like : ProjectName.test/boutique, i get

"Target class [App\Http\Controllers\ProductController] does not exist."

After reading about the changes since the update of Laravel to V8 here, i've seen that the update made some requirements for routes since $namespace prefix are not enabled automatically, but however that can be enabled again by uncommenting this line in RouteServiceProvider

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

I do uncommenting that line and then clear the cache using php artisan route:cache, however it still not working..

When i first started doing research about routes issues in Laravel i've seen many forum spotted out that apache Allowoverride settings in httpd.config file may cause issue, so i change it settings from None to All and then restart Laragon but nothing works.

After correcting label on my controller it still do not work, i try both methode (the old and the new one) none of them works for me, cmd keeps returning me :

λ php artisan route:list

   Illuminate\Contracts\Container\BindingResolutionException

  Target class [ProductController] does not exist.

  at C:\laragon\www\ProjectName\vendor\laravel\framework\src\Illuminate\Container\Container.php:835
    831▕
    832▕         try {
    833▕             $reflector = new ReflectionClass($concrete);
    834▕         } catch (ReflectionException $e) {
  ➜ 835▕             throw new BindingResolutionException("Target class [$concrete] does not exist.", 0, $e);
    836▕         }
    837▕
    838▕         // If the type is not instantiable, the developer is attempting to resolve
    839▕         // an abstract type such as an Interface or Abstract Class and there is

  1   [internal]:0
      Illuminate\Foundation\Console\RouteListCommand::Illuminate\Foundation\Console\{closure}(Object(Illuminate\Routing\Route))

  2   C:\laragon\www\ProjectName\vendor\laravel\framework\src\Illuminate\Container\Container.php:833


      ReflectionException::("Class "ProductController" does not exist")

3 Answers3

1

Laravel 8 Route should be

Route::get('/boutique', [NameController:class,'method']);

So in your web.php file add

 use  App\Http\Controllers\ProductContoller

Then write your route like this:

Route::get('/boutique', [ProductContoller::class,'index']);

And I think there is a missing 'r' in your "ProductController" class name

0

I found out after watching a tutorial here on most common issues with new routing methodes on Laravel 8 that when uncommenting the RouteServiceProvider, using the old method require to use the old route method too on web.php, so it looks like that :

Route::get('/boutique', 'ProductController@index');
0

Please use

Route::get('/boutique', '\App\Http\Controllers\ProductController@index');

or use name route group and indicate the namespace

Route::group(['namespace' => 'App\Http\Controllers'], function(){
  Route::get('/boutique', 'ProductController@index');
});

let me know how it works.