方法控制器不存在。

Posted

技术标签:

【中文标题】方法控制器不存在。【英文标题】:Method controller does not exist. 【发布时间】:2016-09-12 12:02:59 【问题描述】:

所以我再次使用了这种格式。在我的 routes.php 中我有

Route::controller('datatables', 'HomeController', [
    'PaymentsData'  => 'payments.data',
    'getIndex' => 'datatables',
]);

在我的 HomeController.php 中有

  public function getIndex()
    
        return view('payments.index');
    

    /**
     * Process datatables ajax request.
     *
     * @return \Illuminate\Http\JsonResponse
     */
    public function Payments()
    
        return Datatables::of(DB::table('customer'))->make(true);
    

任何时候我尝试php artisan 我都会得到[BadMethodCallException] Method controller does not exist.

问题,这种做法是弃用还是为什么有人发现有问题?请协助。谢谢。

【问题讨论】:

【参考方案1】:

controller 方法自 Laravel 5.3 起已弃用。但现在,您可以使用resource 方法,其目的与controller 方法相同:

来自docs:

Laravel 资源路由通过一行代码将典型的“CRUD”路由分配给控制器。例如,您可能希望创建一个控制器来处理对应用程序存储的“照片”的所有 HTTP 请求。

将其用作:

Route::resource('datatables', 'HomeController');

这种隐式路由的缺点是你必须一致地命名你的方法,更多关于它的文档。

在大多数情况下,更好的做法是显式路由,因为它使您的代码更加清晰易懂。

【讨论】:

【参考方案2】:

据我所知,Laravel 5 从未使用过。我没有使用 4,所以我不确定在 5 之前。但在 5 中你需要使用 Route::getRoute::post

Route::get('datatables', ['as' => 'HomeController', 'uses' => 'HomeController@getIndex']);
Route::get('payments-data', ['as' => 'HomeControllerPaymentsData', 'uses' => 'HomeController@Payments']);

是的,它已被删除,因为使用隐式控制器是不好的做法 - https://github.com/illuminate/routing/commit/772fadce3cc51480f25b8f73065a4310ea27b66e#diff-b10a2c4107e225ce309e12087ff52788L259

【讨论】:

以上是关于方法控制器不存在。的主要内容,如果未能解决你的问题,请参考以下文章

controller does not exist"phpcms 控制器不存在的解决方法

通过控制器助手授权:方法 authorize() 不存在 - Laravel 5.5

Lumen 中不存在方法尝试

方法保存不存在。拉拉维尔

方法 Illuminate\View\View::response 不存在

Laravel通知系统:方法通知不存在。