2015-12-29 7 views
5

Soll ich diese Struktur verwenden ...Slim 3 Framework - Soll ich Routengruppen für meine API verwenden?

require 'vendor/autoload.php'; 
$app = new \Slim\App; 

$app->get('/books', 'getBooks'); 
$app->get('/books/{id}', 'getBook'); 

$app->run(); 

function getBooks() { 
    // Return list of books 
} 

function getBook($id) { 
    // Return a single book 
} 

Oder diese "Route Groups" ein?

require 'vendor/autoload.php'; 
$app = new \Slim\App; 

$app->group('/books', function() use ($app) { 
    $app->get('', function ($req, $res) { 
     // Return list of books 
    }); 

    $app->get('/{id:\d+}', function ($req, $res, $args) { 
     // Return a single book 
    }); 
}); 

$app->run(); 

Was ist der bessere Weg? Ersteres scheint viel sauberer zu sein. Ich bin relativ neu, daher bin ich mir der Vor- und Nachteile nicht bewusst.

+0

eigentlich, für mich sieht das letztere viel besser strukturiert aus. aber wenn beide funktionieren, möchten Sie es vielleicht so machen, wie es Ihnen besser gefällt. SO ist nicht wirklich geeignet für Meinungsfragen. – nonchip

+0

@nonchip Das ist die Sache. Ich weiß nicht, ob es an der Meinung liegt oder es eine richtige Konvention gibt. – Ivan

+0

na dann schauen Sie sich docs oder Beispielprojekte für das Framework an, und was immer dort konsistenter zu verwenden scheint, könnte die Konvention sein. Als Faustregel würde ich sagen, das erste Beispiel ist in Ordnung (= einfach), wenn man die Dinge kurz hält, aber das zweite scheint besser zu verwalten (sowohl vom Standpunkt eines optimierenden Routers als auch vom Standpunkt eines Programmierers), also nutze das wenn du mit Büchern viel zu tun hast. – nonchip

Antwort

8

Im Allgemeinen verwenden Sie Routengruppen, um ähnliche Ressourcen oder Inhalte zu organisieren, sodass Sie ihre Beziehung im Code sichtbar sehen können. Routengruppen sind auch hilfreich, wenn Sie spezielle Bedingungen wie Middleware einer bestimmten Gruppe zuordnen müssen. Beispiel: Sie haben möglicherweise einen Administratorabschnitt auf Ihrer Website und möchten sicherstellen, dass der Benutzer tatsächlich Administrator ist, bevor Sie auf den Controller zugreifen.

Offensichtlich wäre es sinnvoller, diese Routen zusammen zu gruppieren, da sie ähnliche Merkmale aufweisen. Wenn Sie jemals etwas an diesen Eigenschaften in der Zukunft ändern müssen (wie die Art der Middleware), müssen Sie es nur einmal tun.

$app->group('/panel', function() use ($app) { 
    $app->group('/admin', function() use ($app) { 
     $app->get('', 'Admin/DashboardController:index'); 
     $app->get('/users', 'Admin/UserController:index'); 
     $app->post('/users', 'Admin/UserController:create'); 

    })->add($adminAuth); 
})->add($userAuth); 

Es ist auch hilfreich, wenn Sie jemals den Anwendungsfall dieser spezifischen URI erweitern wollen, können so sagen, dass Sie ein neues Feature in der Platte ausrollen wollen, dass normale Benutzer verwenden können.

$app->group('/panel', function() use ($app) { 

    $app->group('/admin', function() use ($app) { 

     $app->get('', 'Admin/DashboardController:index'); 
     $app->get('/users', 'Admin/UserController:index'); 
     $app->post('/users', 'Admin/UserController:create'); 

    })->add($adminAuth); 


    $app->get('', 'DashboardController:index'); 

})->add($userAuth); 

Obwohl es nicht sehr viel von Bedeutung ist, ist es nur gute Praxis den gesamten Code Layout wie möglich organisiert und Route-Gruppen können Sie dies tun.

+1

Verdammt, das ist eine gute Antwort. Vielen Dank! – Ivan

+0

Hinweis: Innerhalb der Gruppenschließung wird '$ this' anstelle von' $ app' verwendet. Slim bindet den Abschluss an die Anwendungsinstanz für Sie, genau wie es bei den Callback-Verbindungen für Routen mit der Containerinstanz der Fall ist. Innerhalb der Gruppenschließung ist '$ this' an die Instanz von Slim \ App innerhalb der Routenschließung gebunden,' $ this' ist an die Instanz von Slim \ Container gebunden [Slim Dokumentation: Routengruppen] (https://www.slimframework.com/docs/objects/router.html#route-groups) – red

+1

@red true, aber IDEs verstehen leicht die Verwendung ($ app) als $ this. Ich gehe mit der oben genannten Methode für alle meine Apps anstelle von $ this. – Sojimaxi