How can I implement Resource Controllers if I use many “get” on the laravel?

佐手、 提交于 2019-11-26 14:53:01

问题


I have routes laravel like this :

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');
    });
});

My controller like this :

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

I want to change it to Resource Controllers(https://laravel.com/docs/5.6/controllers#resource-controllers)

So I only use 1 routes

From my case, my routes to be like this :

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

If I using resouce controller, I only can data in the index method or show method

How can I get data in order method and transaction method?


回答1:


You could try like this, Just put your resource controller custom method up resource route.

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');
});



回答2:


For the resource controller, it is pre-defined by the Laravel, which contain only the 7 method.

Shown at below table.

So, if you want any other method, you have to definde by youself.

php artisan route:list

You can use this to check all the route you defined.




回答3:


The other answers on here are pretty much correct.

From my other answer you linked this question in from, here that way based on what MD Iyasin Arafat has suggested, if you are using 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');

    });

});

Grouping Methods ( ->group() ) :


Controller Namespace ( ->namespace('Member') )

Prepends to 'PurchaseController' to give 'Member\PurchaseController'


Route Name (->name('member.'))

Prepends to name('purchase.order') to give route('member.purchase.order')


URI Request (->prefix('member'))

Prepends to /purchase to give example.com/member/purchase

As you can see, using the methods above with group() reduces repetition of prefix declarations.

Hint

Custom routes must always be declared before a resource never after!

Example to use if you have a lot of custom routes for Purchase Controller and how a second controller looks for member 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');

            });

    });

});


来源:https://stackoverflow.com/questions/49594340/how-can-i-implement-resource-controllers-if-i-use-many-get-on-the-laravel

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!