0
votes

I am trying to run test page using Laravel.

When I use Controller, every time I got message:

Laravel: ReflectionException - Class App\Http\Controllers\XXXX does not exist

Does somebody knows where problem is?

This is my routes/web.php:

   Route::get('/hi', 'HiController@index');

HiController.php (it is in correct folder structure: app/Http/Controllers/

namespace App\Http\Controllers;

use Illuminate\Http\Request;

class HiController extends Controller
{
    public function index(){
      return "test";
    }
}

RouteServiceProvider.php

namespace App\Providers;

use Illuminate\Support\Facades\Route;
use Illuminate\Foundation\Support\Providers\RouteServiceProvider as ServiceProvider;

class RouteServiceProvider extends ServiceProvider
{
    /**
     * This namespace is applied to your controller routes.
     *
     * In addition, it is set as the URL generator's root namespace.
     *
     * @var string
     */
    protected $namespace = 'App\Http\Controllers';

    /**
     * Define your route model bindings, pattern filters, etc.
     *
     * @return void
     */
    public function boot()
    {
        //

        parent::boot();
    }

    /**
     * Define the routes for the application.
     *
     * @return void
     */
    public function map()
    {
        $this->mapApiRoutes();

        $this->mapWebRoutes();

        //
    }

    /**
     * Define the "web" routes for the application.
     *
     * These routes all receive session state, CSRF protection, etc.
     *
     * @return void
     */
    protected function mapWebRoutes()
    {
        Route::middleware('web')
             ->namespace($this->namespace)
             ->group(base_path('routes/web.php'));
    }

    /**
     * Define the "api" routes for the application.
     *
     * These routes are typically stateless.
     *
     * @return void
     */
    protected function mapApiRoutes()
    {
        Route::prefix('api')
             ->middleware('api')
             ->namespace($this->namespace)
             ->group(base_path('routes/api.php'));
    }
}

Also, when I use this code in routes/web.php it works:

Route::get('/hi', function (){
  return "hi";
});

It's clean Laravel 5.6 installation, on Windows, wamp64.

I tried also with "composer dump auto-load" and "php artisan config:clear" but nothing works.

Thank you in advance.

3
Got the same error message and could not find the reason. At least it was a missing namespace for a custom Request class that I uses for the Route wich was named the same as the controller method.Nils Fett

3 Answers

0
votes

Run the following (assuming your app name is app):

php artisan app:name app

Then use the following namespace also in your controller:

app\Http\Controllers\Controller
0
votes

Q: why XXXX if it's HiController? About the issue, if it returns the hi, technically, it has to work if it's vanilla. Since its on windows and wamp64, I don't think file permissions are a thing so let's skip that.

  1. Make sure the name of the file is indeed correct
  2. Make sure the file indeed exists in the correct directory
  3. Make sure the namespce is namespace App\Http\Controllers;
  4. Add this use, just in case: use App\Http\Controllers\Controller;
  5. Just to be sure, make sure in your composer.json you've got this (you should have since it's default):

    "autoload": {
        "psr-4": {
            "App\\": "app/"
        }
    }
    
  6. If none work, try creating a new controller php artisan make:controller SomeController and try it with this one.

0
votes

tried every option, the only that worked for me was restarting the vm, ngingx or laravel had something cached or something similar that throw this error.