2015-12-29 8 views
5

Dovrei usare questa struttura ...Slim 3 Framework - Devo utilizzare Route Groups per la mia API?

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 
} 

O questo "percorso Gruppi" uno?

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(); 

Qual è il modo migliore? Il primo sembra molto più pulito. Sono relativamente nuovo, quindi non sono a conoscenza dei pro e dei contro.

+0

in realtà, per me, quest'ultimo sembra molto più strutturato. ma se entrambi funzionano, potresti voler farlo nel modo che preferisci, SO non è adatto per le domande di opinione – nonchip

+0

@nonchip Questa è la cosa. Non so se si tratta di opinioni o di una convenzione adeguata. – Ivan

+0

bene quindi dare un'occhiata a documenti o progetti di esempio per il framework, e qualsiasi cosa sembra essere utilizzata lì in modo più coerente potrebbe essere la convenzione. come regola generale direi che il primo esempio va bene (= facile) se si mantengono le cose a breve, ma il secondo sembra meglio gestirlo (sia da un router ottimizzatore che dal punto di vista di un programmatore), quindi usalo se hai intenzione di fare un sacco di cose con i libri. – nonchip

risposta

8

Generalmente, si utilizzano gruppi di percorsi per organizzare risorse o contenuti simili in modo da poter vedere visibilmente la loro relazione nel codice. I gruppi di percorsi sono anche utili se è necessario inserire condizioni speciali come il middleware in un gruppo specifico. Ad esempio, potresti avere una sezione amministratore sul tuo sito web e assicurarti che l'utente sia effettivamente un amministratore prima di accedere al controller.

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

Ovviamente, avrebbe più senso raggruppare insieme questi percorsi perché condividono tratti simili. Se hai bisogno di cambiare qualcosa su questi tratti in futuro (come il tipo di middleware), dovresti farlo una sola volta.

$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); 

E 'anche utile se si sarebbe mai ad espandere il caso d'uso di quello specifico URI, quindi diciamo che si desidera implementare una nuova funzionalità nel pannello che gli utenti normali possono utilizzare.

$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); 

Anche se non è una grande quantità di importanza, è solo una buona pratica per il layout tutto il codice organizzato come possibile, e gruppi di percorso permettono di fare questo.

+1

Dannazione, questa è una buona risposta. Grazie! – Ivan

+0

Nota all'interno della chiusura del gruppo, '$ this' viene usato al posto di $ $ app. Slim associa la chiusura all'istanza dell'applicazione, proprio come nel caso in cui il callback della route esegue il binding con l'istanza del contenitore. all'interno del gruppo, '$ this' è associato all'istanza di Slim \ App all'interno della chiusura percorso,' $ this' è associato all'istanza di Slim \ Container [Documentazione snella: Raggruppa gruppi] (https://www.slimframework.com/docs/objects/router.html#route-groups) – red

+1

@red true ma gli IDE capiscono facilmente l'uso ($ app) di $ this. Vado con il metodo sopra per tutte le mie app invece di usare $ this. – Sojimaxi

Problemi correlati