类App\Http\Controllers\PostController不存在 [英] Class App\Http\Controllers\PostController does not exist

查看:179
本文介绍了类App\Http\Controllers\PostController不存在的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

让我首先说:我知道这个问题经常被问到。

Let me just start by saying "I know this question gets asked a lot." believe me when i say nothing has worked for me.

我创建了一个名为 PostController 的控制器。这是我博客的控制器。当我导航到博客时,出现以下错误 Class App\Http\Controllers\PostController不存在,即使它确实存在。该控制器称为 PostController.php 。路由如下所示: Route :: get('blog','PostController @ index'); 。我已经读过运行某些 composer 命令会有所帮助,但没有一个对我有帮助。 composer dumpautoload 以及 composer update 。我在这里错过了一些步骤吗?有人遇到类似的问题吗?请让我知道是否需要其他信息。

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;

这里是整个控制者。

<?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);
    }


}

谢谢。

推荐答案

如果 composer dumpautoload 没有帮助,请检查您是否具有正确的< PostController.php 中的code> namespace 声明,并仔细检查类名/路由声明中的拼写错误。

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.

如果此操作失败,请检查 composer.json 以进行自动加载配置,它应具有以下内容:

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

Route::get('blog',\App\Http\Controllers\PostController::class . '@index');

有了这个功能,任何体面的IDE如果找不到文件,都会发出某种警告/有错别字

With this any decent IDE should give some kind of a warning if it can't find the file/there's a typo

编辑

您的文件应该有这样的一行

Your file should have a line like this

namespace App\Http\Controllers;

在文件开始时,在<?php之后code>或<?phpclarify(strict_types = 1); (如果您使用的是php7严格模式)

At the beggining of the file, right after <?php or <?php declare(strict_types = 1); if you're using php7 strict mode

这篇关于类App\Http\Controllers\PostController不存在的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆