Method controller does not exist.

2019-05-24 18:50发布

So I have used this format again. In my routes.php I have

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

In my HomeController.php I have

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

Anytime I try php artisan I get [BadMethodCallException] Method controller does not exist.

Question, is this form of doing it Deprecation or why anyone spot something wrong? Kindly assist. Thank you.

2条回答
萌系小妹纸
2楼-- · 2019-05-24 19:34

As far as I'm aware that's never been available for Laravel 5. I haven't used 4 so I'm not sure about prior to 5. But in 5 you need to use Route::get and Route::post.

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

Yep, it was removed as using implicit controllers is bad practice - https://github.com/illuminate/routing/commit/772fadce3cc51480f25b8f73065a4310ea27b66e#diff-b10a2c4107e225ce309e12087ff52788L259

查看更多
仙女界的扛把子
3楼-- · 2019-05-24 19:40

The controller method is deprecated since Laravel 5.3. But now, you can use the resource method, which is meant for the same purpose as the controller method:

From the docs:

Laravel resource routing assigns the typical "CRUD" routes to a controller with a single line of code. For example, you may wish to create a controller that handles all HTTP requests for "photos" stored by your application.

Use it as:

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

The downside of this implicit routing is that you have to name your methods consistently, more about it in the docs.

In most cases, better practise would be explicit routing, as it makes your code much more clear and understandable.

查看更多
登录 后发表回答