方法控制器不存在。

时间:2016-09-12 12:03:00

标签: php datatable controller laravel-5.2

所以我再次使用了这种格式。在我的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.

问题,是这种形式的做法贬值或为什么有人发现错误?请帮助。谢谢。

2 个答案:

答案 0 :(得分:3)

据我所知,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

答案 1 :(得分:3)

自Laravel 5.3以来,不推荐使用resource方法。但现在,您可以使用controller方法,该方法与Route::resource('datatables', 'HomeController'); 方法的目的相同:

来自docs

  

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

将其用作:

server

隐式路由的缺点是您必须在文档中更一致地命名您的方法。

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