web-dev-qa-db-ja.com

Laravel 4-Route :: resource vs Route :: controller。どちらを使用しますか?

リソースコントローラーには次の方法があることを理解しています

index
show
create
edit
store
update
destroy

ここで、リソースアクションに加えて、実行する必要のある次のアクションがあるとします。

  • ユーザーがログインしようとしました。
  • 管理者がメール/名でユーザーを検索したい
  • ユーザーがスラッグで投稿をリクエストする

リソースコントローラーは上記の機能には役に立ちませんか? APIをプログラミングする場合、私は明らかにインデックス、表示、編集、作成、破棄...だけでなく、ログイン、検索、検索なども必要です...

両方のタイプのコントローラーにルーティングすることは可能ですか?例えば.

Route::group(['prefix' => 'api'], function() {
    Route::group(['prefix' => 'v1'], function() {
        // Resource Controller
        Route::resource('posts', 'Api\V1\PostsResourceController');

        // Restful Controller
        Route::controller('posts', 'Api\V1\PostsController');
    });
});

または、リソースコントローラーを忘れて、代わりにRESTfulコントローラーを使用する必要がありますか?

14
Gravy

リソースコントローラーを使用するだけです 他のメソッドを同じコントローラーに追加し、それらのメソッドにルートを直接追加します

_Route::group(['prefix' => 'api'], function()
{
    Route::group(['prefix' => 'v1', 'namespace' => 'Api\V1'], function()
    {
        // Add as many routes as you need...
        Route::post('login', 'PostsResourceController@login');
        Route::get('find',   'PostsResourceController@find');
        Route::get('search', 'PostsResourceController@search');

        Route::resource('posts', 'PostsResourceController');
    });
});
_

P.S。私は一般的にRoute::controller()の使用を躊躇します。 あいまいすぎます

32
Joseph Silber

リソースコントローラーに関連する問題の1つは、名前付きルートを使用している場合です。グループプレフィックスを使用すると、すべてが大きな混乱になります。プレフィックスに小さな変更を加える場合は、ビューとコントローラー全体で変更を加える必要があります。つまり、名前付きルートの全力を発揮することはできません。

laravelアプリを開発するときは、このモデルに従います。

Route::group( [ 'prefix' => 'admin' ], function(){
        Route::resource('pages', 'PageController', [
            'names' => [
                'show' => 'page',
                'edit' => 'page.edit'
            ],
            'only' => [
                'show',
                'edit'
            ]

        ]);

    });

そのため、次の利点があります。

  • 必要なルートだけがあります。
  • すべてのURLは明確に名前が付けられています

プレフィックスやリソース名を変更しても、構文を使用して快適にURLを生成できます。URLは影響を受けません。

URL::route('page', array($id))
1
Sojan V Jose