0

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.

1
  • 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. Commented Nov 7, 2019 at 17:20

3 Answers 3

0

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
Sign up to request clarification or add additional context in comments.

Comments

0

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.

5 Comments

I forget to say that I put XXXX instead of HiController because every controller that I made throws the same error. Even tried with SomeController. Also, when I run route:list in cmd I got: "Class App\Http\Controllers\HiController does not exist"
Are you sure the class ends with .php and inside, starts with <? php and ends on ?> ?
Yes it use <?php. Could this be related somehow with .htaccess?
Thank you @abr for detailed answer. I made it works after I put HiController.php in vendor/laravel/laravel/app/Http/Controllers. Is that positioning of file right way to do it?
Im afraid no, it is not. That isn't even laravel's default files. Laravels default files are in vendor/laravel/framework/src.... You have installed incorrectly Laravel. Most likely, it appears you have installed a laravel application inside the file system of another laravel project
0

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.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.