Class App\Http\Controllers\PostController does not exist

31,661

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';

Share:
31,661
IE5Master
Author by

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, 2022

Comments

  • IE5Master
    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 error Class App\Http\Controllers\PostController does not exist even though it does exist. The controller is called PostController.php. Here is what the route looks like Route::get('blog','PostController@index');. I have read that running some composer commands will help but none of them have helped me. composer dumpautoload as well as composer 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.