我们在Laravel 5.2中知道Route::controller()
和Route::controllers()
方法已被弃用,但对于减少路由数量非常方便。我能够像这样Route::controller('admin/invoice','InvoiceController')
编写简单的路由。通过这种简单的方法,我可以管理与控制器进行发票相关工作的所有事情。
class InvoiceController extends Controller{
public function getInvoices(){ }
public function getInvoiceDetails(){ }
public function postStoreInvoice(){ }
public function postUpdateInvoice(){ }
public function postStoreInvoiceDetails(){ }
public function postupdateInvoiceDetails(){ }
public function postDeleteInvoice(){ }
public function postDeleteInvoiceDetails(){ }
....
}
但是很遗憾,此Route::controller()
和Route::controllers()
不再可用的laravel 5.1版以上。 Route::resource()
可用的选项,但路由数量有限。 laravel路线是Macroable,有一个扩展路线特征的选项,例如
Illuminate\Routing\Router::macro('controller', function ($routes) {
// implementation
});
是否有人为Laravel 5.8,6实现Route::controller()
和Route::controllers()
方法?或提出任何建议。
答案 0 :(得分:1)
您可以使用Route::resource()
或Route::resources()
。
示例:
Route::resource('books', 'BookController');
这将假设您有
class BookController extends Controller {
// to list resources.
public function index();
// to show create form.
public function create();
// to store resource in database.
public function store();
// to show single resource.
public function show();
// to show edit form.
public function edit();
// to edit and then store the modified resource in database.
public function update();
// to delete a resource from database.
public function destroy();
}
您应该阅读https://laravel.com/docs/master/controllers#resource-controllers以获得更多信息。
由于某些原因,在5.2
版中删除了隐式控制器。
如果您来自CodeIgniter世界,那么您可能会感到温暖而模糊 隐式路由的感觉。您知道URI在哪里匹配 将被调用的控制器方法。您甚至可能想要这个 为您的Laravel开发(Laravel可以做到)。
尽管起初简单地调用它似乎很有用 Route :: controller('admin','AdminController'),然后声明所有 您希望从控制器获得的路线,有很多 挫折。想一想使用隐式路由时的情况, 利用命名路由,或创建嵌套资源,甚至 就像重命名控制器类一样简单,而不会影响 您的URI设计。
不,关于隐式路由,请说不。
来源:https://laracasts.com/lessons/say-no-to-implicit-routing
但是,如果您需要此功能,则可以使用此软件包: Laravel Routes Publisher或Laravel Advanced Route