【问题标题】:Laravel : Method [index] does not exist on [App\Http\Controllers\admin\PostsController]Laravel:[App\Http\Controllers\admin\PostsController] 上不存在方法 [index]
【发布时间】:2018-02-12 18:40:56
【问题描述】:

这个答案没有解决我的问题Route::controllers - Method [index] does not exist on [App\Http\Controllers

在 web.php 中

Route::prefix('admin')->group(function () {
    Route::resource('post', 'admin\PostsController');
});

在 app/Http/Controllers/admin 中

我有 PostsController.php

其中包含

<?php

namespace App\Http\Controllers\admin;

use App\Model\Post;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;

class PostsController extends Controller
{
    /**
     * Display a listing of the resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function index()
    {
        //
        $posts = \App\Post::all();
        return view('admin.posts',['posts'=>$posts]);
    }

    /**
     * Show the form for creating a new resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function create(Request $request)
    {
        //
        $post = new Post;

        $post->content = $request->input('descr');

        $post->save();
    }

当我访问这个网址时http://127.0.0.1:8000/admin/post

我收到以下错误

BadMethodCallException 方法 [index] 不存在于 [App\Http\Controllers\admin\PostsController]。

call_user_func_array
…
/vendor/laravel/framework/src/Illuminate/Routing/Controller.php 56 

 public function callAction($method, $parameters)
    {
        print_r($this);
        echo $method;die();
        return call_user_func_array([$this, $method], $parameters);
    }

//打印

App\Http\Controllers\admin\PostsController Object ( [middleware:protected] => Array ( ) ) index

php artisan 打印以下内容

php artisan route:list 

|        | GET|HEAD  | admin/post             | post.index   | App\Http\Controllers\admin\PostsController@index   | web

【问题讨论】:

  • 尝试访问posts
  • @MASh 豆想让我试试127.0.0.1:8000/admin/posts 而不是127.0.0.1:8000/admin/post 我得到页面未找到错误
  • 是的。试试这个。
  • @MASh 我得到页面未找到错误
  • 然后有一些东西。写一条路线:Route:get('posts','admin\PostsController@index'); and now try to access to admin/posts`。

标签: php laravel


【解决方案1】:

也许您的控制器中有 Ambiguous class,这意味着您可能在不同的控制器中有相同的类名。要解决这个问题,请运行这些命令

 1. composer update 
 2. composer dumpautoload
 3. php artisan config:cache
 4. php artisan view:clear

确保 composer update 成功运行且没有错误。如果控制台中提到了错误,请更正代码库中出现的所有错误。

【讨论】:

  • 谢谢小伙子!你让我开心,显然,我花了几个小时调试我的路由和控制器出了什么问题,最后发现我已将控制器重命名为 ControllerOldController 类名仍然存在于旧控制器中,因此 @ 987654324@ 与旧控制器中定义的类名相冲突,因此出现此异常!快乐编码
【解决方案2】:

使用 laravel 5.4 版,我运行了这个命令

php artisan make:controller admin/PostsController --resource

在 web.php 路由文件中添加了这个

Route::prefix('admin')->group(function () { Route::resource('post', 'admin\PostsController'); });

控制器文件

namespace App\Http\Controllers\admin;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;

class PostsController extends Controller
{
 /**
 * Display a listing of the resource.
 *
 * @return \Illuminate\Http\Response
 */
  public function index()
  {
    echo "call to index";
  }
  ........
   other functions

}

对我来说很好用

【讨论】:

    猜你喜欢
    • 2018-05-25
    • 2021-04-04
    • 2018-07-11
    • 1970-01-01
    • 1970-01-01
    • 2020-06-18
    • 2020-12-29
    • 2020-05-01
    • 2018-12-14
    相关资源
    最近更新 更多