Laravel 5.3+ 中的 Route::controller() 替代方案

Posted

技术标签:

【中文标题】Laravel 5.3+ 中的 Route::controller() 替代方案【英文标题】:Route::controller() alternative in Laravel 5.3+ 【发布时间】:2017-01-08 14:15:15 【问题描述】:

我刚刚从 Laravel 5.2 升级到 5.3。我正在为我的应用程序中的几个表使用Laravel-DataTables 包。

升级后当我运行artisan serve 我收到:

[BadMethodCallException]
Method controller does not exist.

我已经在我的routes.php(现在是web.php)中将问题追溯到这段代码

Route::controller('datatables', 'ProfileController', [
    'anyOrders'  => 'datatables.dataOrders',
    'anyProperties' => 'datatables.dataProperties',
]);

这是路由DataTables Documentation 查询的建议方式。

Route::controller() 是否已弃用,这些路线的替代方案是什么?

【问题讨论】:

【参考方案1】:

你可以使用resource()。

Route::resource('users','UserController');

注意:不需要“get”前缀。 getIndex() = index()

【讨论】:

【参考方案2】:

我和你有同样的问题,没有一个替代方案(显式声明或发布)足够好。还有一些替代方案需要更改太多代码。

这就是为什么我编写了一个名为 AdvancedRoute 的类,它可以作为替代品。

只需将 Route::controller 替换为 AdvancedRoute::controller 即可使用,如下所示:

AdvancedRoute::controller('users','UserController');

如何在 GitHub 存储库中安装和使用 find 的完整信息:

https://github.com/lesichkovm/laravel-advanced-route

希望你觉得这很有用。

【讨论】:

【参考方案3】:

明确的routes 将是:

Route::get('/datatables/orders', array('middleware' => 'auth', 'uses' => 'ProfileController@anyOrders'))->name('datatables.dataOrders');
Route::get('/datatables/properties', array('middleware' => 'auth', 'uses' => 'ProfileController@anyProperties'))->name('datatables.dataProperties');

【讨论】:

谢谢,解决了错误。我不得不删除'middleware'=>'auth' @ArturGrigio 乐于助人 好的,所以我知道隐式路由在 5.3 中消失了。是否有一个包仍然可以在某个地方启用它?或者我该怎么做才能把它带回来? - 没有讨论为什么我不应该这样做...... :)【参考方案4】:

https://laravel.com/docs/5.3/upgrade#upgrade-5.3.0

以下功能已在 5.2 中弃用,并将在 2016 年 6 月的 5.3 版本中删除:

使用Route::controller 的隐式控制器路由已被弃用。请在您的路由文件中使用显式路由注册。这可能会被提取到一个包中。

【讨论】:

错过了 :( 非常感谢 :) 我的用例的显式路由是什么? @ArturGrigio "请在您的路线文件中使用明确的路线注册。"

以上是关于Laravel 5.3+ 中的 Route::controller() 替代方案的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 5.3:布局视图中的路由

RouteCollection.php 第 161 行 Laravel 5.3 中的 NotFoundHttpException

Laravel 5.3 登录路由 - RouteCollection.php 中的 NotFoundHttpException

工匠迁移:laravel 5.3 中的回滚错误

未定义变量:Laravel 5.3 中的 _ENV

Laravel 5.3 中的搜索栏来过滤表格