Class App\Http\Controllers\PostController does not exist
Solution 1
If composer dumpautoload
is not helping then check if you have proper namespace
declaration in PostController.php
and double check for typos in class name/route declaration.
If this fails check composer.json
for autoload configuration, it should have something like this:
"autoload": {
"psr-4": {
"App\\": "app/"
}
},
As a side note you could use something like this:
Route::get('blog',PostController::class . '@index');
or
Route::get('blog',\App\Http\Controllers\PostController::class . '@index');
With this any decent IDE should give some kind of a warning if it can't find the file/there's a typo
Edit:
Your file should have a line like this
namespace App\Http\Controllers;
At the beggining of the file, right after <?php
or <?php declare(strict_types = 1);
if you're using php7 strict mode
Solution 2
Open App\Provider\RouteServiceProvider.php and add this line
protected $namespace = 'App\Http\Controllers';
below this
public const HOME = '/home';
and your error will vanish.
Solution 3
Open App\Providers\RouteServiceProvider.php and uncomment row:
protected $namespace = 'App\\Http\\Controllers';
Thank you, this metod help for me!
Solution 4
if you use laravel 8.* then Open App->Providers>RouteServiceProvider.php and uncomment this line:
protected $namespace = 'App\Http\Controllers';
IE5Master
Master at all things IE 5. Master at inline styling. Layouts should be done with tables. What is responsive design? I like cake. I use to be a T-Rex.
Updated on July 05, 2022Comments
-
IE5Master almost 2 years
Let me just start by saying "I know this question gets asked a lot." believe me when i say nothing has worked for me.
I have created a controller called
PostController
. This is a controller for my blog. When I navigate to my blog i get the following errorClass App\Http\Controllers\PostController does not exist
even though it does exist. The controller is calledPostController.php
. Here is what the route looks likeRoute::get('blog','PostController@index');
. I have read that running somecomposer
commands will help but none of them have helped me.composer dumpautoload
as well ascomposer update
. Am i missing some step here? Anyone run into a similar problem? Please let me know if additional information is needed.EDIT Here are the namespaces at the top.
use App\Http\Controllers; use App\Posts; use App\User; use App\Http\Controllers\Controller; use App\Http\Requests\PostFormRequest; use Illuminate\Http\Request;
Here is the whole Controller.
<?php use App\Http\Controllers; use App\Posts; use App\User; use App\Http\Controllers\Controller; use App\Http\Requests\PostFormRequest; use Illuminate\Http\Request; class PostController extends Controller { /** * Display a listing of the resource. * * @return Response */ public function index() { //fetch 5 posts from database which are active and latest $posts = Posts::where('active',1)->orderBy('created_at','desc')->paginate(5); //page heading $title = 'Latest Posts'; //return home.blade.php template from resources/views folder return view('blog/home')->withPosts($posts)->withTitle($title); } /** * Show the form for creating a new resource. * * @return Response */ public function create(Request $request) { // if user can post i.e. user is admin or author if($request->user()->can_post()) { return view('blog.create'); } else { return redirect('blog'); } } /** * Store a newly created resource in storage. * * @return Response */ public function store(PostFormRequest $request) { $post = new Posts(); $post->title = $request->get('title'); $post->body = $request->get('body'); $post->slug = str_slug($post->title); $post->author_id = $request->user()->id; if($request->has('save')) { $post->active = 0; $message = 'Post saved successfully'; } else { $post->active = 1; $message = 'Post published successfully'; } $post->save(); return redirect('edit/'.$post->slug)->withMessage($message); } /** * Display the specified resource. * * @param int $id * @return Response */ public function show($slug) { $post = Posts::where('slug',$slug)->first(); if(!$post) { return redirect('/')->withErrors('requested page not found'); } $comments = $post->comments; return view('posts.show')->withPost($post)->withComments($comments); } /** * Show the form for editing the specified resource. * * @param int $id * @return Response */ public function edit(Request $request,$slug) { $post = Posts::where('slug',$slug)->first(); if($post && ($request->user()->id == $post->author_id || $request->user()->is_admin())){ return view('posts.edit')->with('post',$post); } return redirect('blog')->withErrors('you have not sufficient permissions'); } /** * Update the specified resource in storage. * * @param int $id * @return Response */ public function update(Request $request) { // $post_id = $request->input('post_id'); $post = Posts::find($post_id); if($post && ($post->author_id == $request->user()->id || $request->user()->is_admin())) { $title = $request->input('title'); $slug = str_slug($title); $duplicate = Posts::where('slug',$slug)->first(); if($duplicate) { if($duplicate->id != $post_id) { return redirect('edit/'.$post->slug)->withErrors('Title already exists.')->withInput(); } else { $post->slug = $slug; } } $post->title = $title; $post->body = $request->input('body'); if($request->has('save')) { $post->active = 0; $message = 'Post saved successfully'; $landing = 'edit/'.$post->slug; } else { $post->active = 1; $message = 'Post updated successfully'; $landing = $post->slug; } $post->save(); return redirect($landing)->withMessage($message); } else { return redirect('blog')->withErrors('you have not sufficient permissions'); } } /** * Remove the specified resource from storage. * * @param int $id * @return Response */ public function destroy(Request $request, $id) { // $post = Posts::find($id); if($post && ($post->author_id == $request->user()->id || $request->user()->is_admin())) { $post->delete(); $data['message'] = 'Post deleted Successfully'; } else { $data['errors'] = 'Invalid Operation. You have not sufficient permissions'; } return redirect('blog')->with($data); } }
Thanks.