Trying to use invokable controllers, but it seems to fail to find the __invoke method?
Invalid route action: [AppHttpControllersAppHttpControllersMainController].
It seems to be returning true on:
if (! method_exists($action, '__invoke')) {
    throw new UnexpectedValueException("Invalid route action: [{$action}].");
}
Routes:
<?php
Route::get('/', AppHttpControllersMainController::class);
MainController:
<?php
namespace AppHttpControllers;
class MainController extends Controller
{
    public function __invoke()
    {
        dd('main');
    }
}
Advertisement
Answer
Laravel by default assumes that your controllers will be located at AppHttpControllers. So when you’re adding the full path to your controller, Laravel will check it there, at AppHttpControllersAppHttpControllersMainController.
To solve it simply remove the namespace when you’re registering the route, and register it like this:
Route::get('/', MainController::class);
Alternatively, you can stop this behavior by removing ->namespace($this->namespace) from  mapWebRoutes() method on RouteServiceProvider class, which is located at AppProviders folder. Then you can register your routes like this: 
Route::get('/', AppHttpControllersMainController::class);