This is my Route:
Route::get('/hello', '#HomeController#index');
This is my HomeController
namespace App\Http\Controllers;
use app\Requests;
use Illuminate\Http\Requests;
use Spatie\Activitylog\Models\Activity;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Support\Facades\Auth;
class HomeController extends Controller {
public function index() {
$lastActivity = Spatie\Activitylog\Models\Activity::all();
return view('activity'), compact('lastActivity'));
}
}
But I keep on getting an error message:
ReflectionException in Route.php line 280:
Class App\Http\Controllers\ does not exist
What can I do? Thanks.
At the first of controller you do not need to put #, its just for method of controller.
Route::get('/hello', 'HomeController#index');
You have an extra # in your method call.
'#HomeController#index'
should be
'HomeController#index'
Whenever errors of type ReflectionException occur, you should check the routes in the routes/api.php and routes/web.php files to correct them ok understand do it carefully next time.
Related
I am learning Laravel 9, and I got a problem Target class [Admin\DashboardController] does not exist. when using prefix routing. Is someone can help me to fix it?
this code on routes/web:
Route::prefix('admin')->namespace('Admin')->group(function(){
Route::get('/','DashboardController#index')->name('dashboard');
});
this code on App\Http\Controllers\Admin\DashboardController:
namespace App\Http\Controllers\Admin;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
class DashboardController extends Controller
{
public function index(Request $request){
return view('pages.admin.dashboard');
}
}
You've specified an incorrect namespace in your route. As per the error message:
Target class [Admin\DashboardController] does not exist
Laravel expects to find a DashboardController in the Admin namespace, however, you've defined your DashboardController with the namespace App\Http\Controllers\Admin.
Update the namespace on your route.
Route::prefix('admin')->namespace('App\Http\Controllers\Admin')->group(function(){
Route::get('/','DashboardController#index')->name('dashboard');
});
If you read the documentation, you will see that you must use another way:
Route::prefix('admin')->namespace('Admin')->group(function(){
Route::get('/', [DashboardController::class, 'index'])->name('dashboard');
});
Update:
When I use:
namespace App\Http\Controllers\Auth;
inside LoginController.php, this error is thrown:
Class "App\Http\Controllers\Auth\Controller" not found
Original Question:
I've added following route to web.php:
namespace App\Http\Controllers;
use Illuminate\Support\Facades\Route;
use App\Http\Controllers\Auth\LoginController;
Route::post('/admin/login', [LoginController::class, 'store']);
but when called, it throws:
Target class [App\Http\Controllers\Auth\LoginController] does not exist.
This is the controller's location:
LoginController.php:
<?php
namespace App\Http\Controllers;
use App\Http\Requests\Auth\LoginRequest;
class LoginController extends Controller
{
public function store(LoginRequest $request)
{
$request->authenticate();
$request->session()->regenerate();
redirect('/admin/dashboard');
}
}
Replacing the import inside web.php with:
[Auth\LoginController::class, 'store']
does not help either. What am I doing wrong?
in LoginController Class write wrong namespase:
namespace App\Http\Controllers\Auth;
Your namespace inside LoginController should be App\Http\Controllers\Auth
In LoginController.php you need to check the namespace for the file
It's not correct, because the file located inside Auth directory
so you must follow psr4 guide
name space will be
App\Http\Controllers\Auth; instead of
App\Http\Controllers;
Your namespace used in LoginController is wrong, as your class is defined under Auth folder so it should be:
namespace App\Http\Controllers\Auth;
Also the code snippet you have shared of web.php show's namespace declaration at the top, please remove this declaration.
Importing it like so inside LoginController.php seems to resolve the issue (although I have no idea why):
<?php
namespace App\Http\Controllers\Auth;
use App\Http\Controllers\Controller;
class LoginController extends Controller
{
public function store(LoginRequest $request)
{
$request->authenticate();
$request->session()->regenerate();
redirect('/admin/dashboard');
}
}
I am getting the error below even though my Controller class is present in my Controllers directory;
Fatal error: Class 'App\Http\Controllers\Controller' not found
Below is the content of my UserController controller (in the same directory, Controllers):
<?php
namespace App\Http\Controllers;
use App\Http\Controllers\Controller;
class UserController extends Controller
{
public function SignIn(Request $request)
{
if (Auth::attempt(['usernameEmail'=>$request['usernameEmail'],'password'=>$request['password']])) {
return redirect()->route('dashboard');
}
return redirect()->back();
}
public function getDashBoard()
{
return view('dashboard');
}
}
What am I doing wrong and how can I resolve it?
You get the Fatal error: Class 'App\Http\Controllers\Controller' not found
error because you have no such a class in your project at the derived location.
Instead of
use App\Http\Controllers\Controller; // this is irrelevant and causing the error you get
you should have
use Illuminate\Http\Request; // this is necessary for your SingIn method
as in:
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class UserController extends Controller
{
// your methods here
}
because one of your SignIn method does make use of it.
It you ran composer dump-autoload and it didn't fixed your problem you placed your controller in wrong folder. It should be inside app\Http\Controllers dir.
If it won't fix your issue, look at storage\logs\laravel.log where you can find more informations about the problem, and where your problem occured. Maybe you are defining routes using wrong classname or something like that.
i'm using laravel 5 , in rutes.php i have this code :
Route::get('about',"homeController#about");
and in App\Http\Controllers\ i have file homeController.php that contains :
<?php
namespace App\Http\Controllers;
use App\Http\Controllers\Controller as BaseController;
class homeController extends BaseController{
public function about(){
return view::make('about');
}
}
but it throws this error : Class App\Http\Controllers\homeController does not exist .
how can i fix it ?
here is structure of the project and controllers :
First, check if you write the name of the controller correctly.
If it is, there are 3 methods:
Route::get('/about', 'App\Http\Controllers\homeController#about');
Write all the paths where your controller there is.
Route::get('/about', [HomeController::class, 'about');
Go to file RouteServiceProvider.php in Providers folder
Search for //protected $namespace = 'App\\Http\\Controllers';
( You will find it in comment)
Remove // of comment and save.
with this method, you will able to use the name of the controller directly without
writing all the paths.
Change all
homeController
To
HomeController
For HomeController.php
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class HomeController extends Controller
{
public function welcome()
{
return view('welcome');
}
}
For web.php
<?php
use Illuminate\Support\Facades\Route;
use App\Http\Controllers\HomeController;
Route::get('/', [HomeController::class, 'welcome']);
Its work for me
change your routing like below:
use App\Http\Controllers\HomeController;
Route::get('/about', [HomeController::class, 'index'])->name('home');
for more info look at this page:
https://laravel.com/docs/8.x/routing
<?php
namespace App\Http\Controllers;
use App\Http\Controllers\Controller as BaseController;
class homeController extends BaseController{
public function about(){
return view::make('about');
}
}
<?php
namespace App\Http\Controllers;
use App\Http\Controllers\Controller as BaseController;
class homeController extends BaseController{
public function about(){
return view::make('about');
}
}
Should works perfectly. Are you sure that name of file is homeController.php ?
I faced a similar issue with the Home controller, in my case I saw the route was configured as following:
Route::get('/home',"homeController#index");
when I changed the above code to the following then it worked.
Route::get('/home',"App\Http\Controllers\HomeController#about");
In your case first, check the spelling first, whether it should be HomeController or homeController.
You can change your route code to the following
so you can try to change the following code
Route::get('about',"HomeController#about");
to
Route::get('about', 'App\Http\Controllers\HomeController#about');
or
Route::get('/about', 'App\Http\Controllers\HomeController#about');
Hope this will work.
It can happen because of these two causes:
Typo Error
Laravel Cache
1) Type Error
For this check, please check your HomeController file name and the class name in that file. Both should be same with case sensitivity.
HomeController.php
class HomeController extends
2) Laravel Cache
Laravel stores file caches with previous configurations. To refresh the cache, do this commands in the command window and then try again
php artisan cache:clear
php artisan view:clear
php artisan optimize
Hope it solved!.
Yes. That is right because you are not giving right path to the action in the routes. Either you update core files for path or provide manually in the route. e.g
you have
Route::get('about',"homeController#about");
try this route
Route::get('/about', [App\Http\Controllers\homeController::class,'about']);
or you can type route as
Route::get('/about', 'App\Http\Controllers\homeController#about');
furthermore you can check if you have right code in the controller function.
You are trying Laravel 7.x and before routing schema. Refer to 8.x documentation.
New syntaxis using as [HomeController::class, 'index'] or you need to add namespace before Controller name like App\Http\Controllers\HomeController.
Update the path to your route by adding .
Route::get('/home', [\App\Http\Controllers\HomeController::class, 'index'])->name('home');
Please update your route
use App\Http\Controllers\HomeController;
Route::get('/about', [HomeController::class, 'about']);
Im having this fatal error exception that i cant seem to figure out:
Class 'App\Http\Controllers\Admin\Controller' not found
For some reason im not sure why it is tacking controller at the end of that error. My namespace for the controller:
namespace App\Http\Controllers\Admin;
use Illuminate\Http\Request;
use App\Announcement;
use App\Http\Requests;
class AnnouncementController extends Controller
{
...
}
and my routes:
Route::group(['prefix' => 'admin','namespace'=>'Admin', 'middleware'=>'auth'], function () {
Route::resource('announcements','AnnouncementController');
});
But when i navigate to the /admin/announcements route i get that fatal exception with the Controller tacked on at the end..
This controller is in the App\Http\Controllers\Admin directory so i m not sure why i m getting this error. Am i name spacing wrong?
Try this
Route
Route::group(['prefix' => 'admin', 'middleware'=>'auth'], function () {
Route::resource('announcements','Admin\\AnnouncementController');
});
Controller
namespace App\Http\Controllers\Admin;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use App\Announcement;
use App\Http\Requests;
class AnnouncementController extends Controller
{
...
}
if this dosent work, check if you have a Controller called Controller in app/Http/Controllers/