首页 > 解决方案 > 需要 Laravel Route::controller 和 Route::controllers

问题描述

正如我们在 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 路线是可宏的,有一个选项可以扩展路线功能,例如

Illuminate\Routing\Router::macro('controller', function ($routes) {
    // implementation
});

有没有人为 Laravel 5.8、6实现Route::controller()和方法?Route::controllers()或建议任何方式。

标签: laravel

解决方案


您可以使用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 PublisherLaravel Advanced Route


推荐阅读