2013-09-30 35 views
14

Ich verstehe, dass eine Ressourcensteuerung die folgenden MethodenLaravel 4 - Route :: Ressource vs Route :: Controller. Was zu verwenden?

index 
show 
create 
edit 
store 
update 
destroy 

Jetzt habe ich die folgenden Aktionen annehmen, haben haben, die zusätzlich zu den Ressourcen-Aktionen durchgeführt werden müssen:

  • Benutzer versucht, sich anzumelden .
  • Admin wünscht ist ein Benutzer per E-Mail/first-name slug
durch
  • Benutzer eine Post finden

    Sind Ressourcen-Controller für die oben genannten Funktionen nutzlos? Wenn ich eine API programmiere, möchte ich natürlich den Index, anzeigen, bearbeiten, erstellen, zerstören ... aber auch das Login, Suchen, Suchen usw. ...

    Ist es möglich, beide Arten von Controller zu routen? z.B.

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

    Oder sollte ich einfach den Ressourcen-Controller vergessen und stattdessen einen erholsamen Controller verwenden?

  • +0

    betroffen würde ich Ressource verwenden route nur, wenn CRUD-Aktionen für diese Logik ausgeführt werden. Ansonsten benutze ich Controller-Route. Ressource 1 erstellt viele Routen zu Ihrer App und wenn Sie sie nicht verwenden, ist es eine Art von Verschwendung. – arma

    +0

    @arma Sie können diese Routen auf die schwarze Liste setzen oder auf die weiße Liste setzen: http://laravel.com/docs/4.2/controllers#restful-resource-controllers –

    Antwort

    32

    Verwenden Sie einfach ein Ressourcen-Controller, add those other methods to that same controller, and add routes to those methods directly:

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

    P. S. Ich scheue mich generell davor, Route::controller() zu verwenden. It's too ambiguous.

    +0

    Danke dafür ... Ich glaube, ich habe versucht, Abkürzungen zu nehmen, indem ich zu routen wollte Controller und eine Ressource! – Gravy

    +0

    Hallo, ich lese Artikel, verstehe aber nicht genau, warum es zu vieldeutig ist. Können Sie erklären? Warum Ressource nicht abwegig (Ressource mehr Routen erstellen und nicht die Existenz der Aktion überprüfen)? Warum Laravel hat Routen und Controller. Warum nicht nur Ressourcen verwenden, wenn es besser ist? Das verwirrt zukünftige Handwerker.Danke – Sonique

    +1

    @VitalyLarchenkov - ** Ressource erstellen Sie mehr Routen **. Nee. Eine Ressource erstellt nur die Routen, die Sie benötigen (wenn Sie sie nicht alle benötigen, sollten Sie ['only' oder' except'] (http://i.imgur.com/NVIy57C.png) angeben, wie beschrieben [in Die Dokumente] (http://laravel.com/docs/controllers#resource-controllers). –

    1

    Eines der Probleme mit Ressourcen-Controllern ist, wenn Sie benannte Routen verwenden, mit Gruppen-Präfixen wird alles zu einem großen Durcheinander. Wenn Sie Ihr Präfix geringfügig ändern möchten, müssen Sie Änderungen in den Ansichten und Controllern vornehmen. dh Sie können nicht die volle Leistung von genannten Routen machen.

    ich befolge dieses Modell bei der Entwicklung meiner Laravel-Apps.

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

    so dass ich die folgenden Vorteile habe.

    • Es gibt nur Routen, die Sie benötigen.
    • alle URLs sind klar
    • genannt

    und ich kann Urls generieren bequem die Syntax verwenden, auch wenn ich eine Änderung in Präfix oder Ressourcennamen Urls machen nicht

    URL::route('page', array($id)) 
    
    Verwandte Themen