需要Laravel Route :: controller和Route :: controllers

时间:2019-09-27 05:50:11

标签: laravel

我们在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()方法?或提出任何建议。

1 个答案:

答案 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 PublisherLaravel Advanced Route