如果我使用很多" get"如何实现资源控制器?在laravel?

时间:2018-04-01 02:50:13

标签: laravel laravel-5 routes resources laravel-5.6

我有像这样的路线:

Route::prefix('member')->middleware('auth')->group(function(){
    Route::prefix('purchase')->group(function(){
        Route::get('/', 'Member\PurchaseController@index')->name('member.purchase.index');
        Route::get('order', 'Member\PurchaseController@order')->name('member.purchase.order');
        Route::get('transaction', 'Member\PurchaseController@transaction')->name('member.purchase.transaction');
    });
});

我的控制器是这样的:

<?php
...
class PurchaseController extends Controller
{
    ...
    public function index()
    {
        ...
    }
    public function order()
    {
        ...
    }
    public function transaction()
    {
        ...
    }
}

我想将其更改为资源控制器(https://laravel.com/docs/5.6/controllers#resource-controllers

所以我只使用1条路线

从我的情况来看,我的路线是这样的:

Route::prefix('member')->middleware('auth')->group(function(){
    Route::resource('purchase', 'Member\PurchaseController');
});

如果我使用资源控制器,我只能在index方法或show方法中使用数据

如何按顺序方法和交易方法获取数据?

3 个答案:

答案 0 :(得分:3)

您可以尝试这样做,只需将资源控制器自定义方法放在资源路径上。

Route::prefix('member')->middleware('auth')->group(function(){
    Route::get('order', 'Member\PurchaseController@order')->name('member.purchase.order');
    Route::get('transaction', 'Member\PurchaseController@transaction')->name('member.purchase.transaction')
    Route::resource('purchase', 'Member\PurchaseController');
});

答案 1 :(得分:2)

对于资源控制器,它由Laravel预定义,它只包含7方法。

如下表所示。

Action handled by resource controller

所以,如果你想要任何其他方法,你必须自己定义。

php artisan route:list

您可以使用它来检查您定义的所有路线。

答案 2 :(得分:1)

这里的其他答案非常正确。

从我的另一个答案中,您将这个问题与此相关联,这是基于 MD Iyasin Arafat <​​/ em>建议的方式,如果您使用的是laravel 5.5 +

# Group all routes requiring middleware auth, thus declared only once

Route::middleware('auth')->group(function(){

    # Suffix rules in group for prefix,namespace & name with "member"

    Route::namespace('Member')->prefix('member')->name('member.')->group(function () {

            Route::get('purchase/order', 'PurchaseController@order')->name('purchase.order');
            Route::get('purchase/transaction', 'PurchaseController@transaction')->name('purchase.transaction');
            Route::resource('purchase', 'PurchaseController');

    });

});

分组方法 - &gt; group()):

控制器命名空间 - &gt;命名空间('会员')

  

预先'PurchaseController'给予   的 '会员\ PurchaseController'

路线名称 - &gt; name('member。')

  

名称('purchase.order')为前提   的路线( 'member.purchase.order')

URI请求 - &gt;前缀('成员')

  

/购买以提供 example.com/member/purchase

如您所见,使用上面的方法和group()可以减少前缀声明的重复。

<强>提示

  

自定义路由必须始终在资源之前之前声明为

如果您有大量购买控制器的自定义路由以及第二个控制器如何查找成员组,则使用示例:

# Group all routes requiring middleware auth, thus declared only once

Route::middleware('auth')->group(function(){

    # Suffix rules in group for prefix,namespace & name with "member"

    Route::namespace('Member')->prefix('member')->name('member.')->group(function () {

            Route::prefix('purchase')->name('purchase.')->group(function() {

                Route::get('order', 'PurchaseController@order')->name('order');

                Route::get('transaction', 'PurchaseController@transaction')->name('transaction');

                Route::get('history', 'PurchaseController@history')->name('history');

                Route::get('returns', 'PurchaseController@returns')->name('returns');

                Route::get('status', 'PurchaseController@status')->name('status');

                Route::resource('/', 'PurchaseController');

            });

            Route::prefix('account')->name('account.')->group(function() {

                Route::get('notifications', 'AccountController@notifications')->name('notifications');

                Route::resource('/', 'AccountController');

            });

    });

});