2014-06-16 7 views
5

Ho costruito la mia prima API RESTful e ho utilizzato Slim come framework. Funziona bene finora.Come creare parametri opzionali come punti interrogativi in ​​Slim?

Ora ho visto una grande guida alla progettazione dell'API che ha spiegato, il modo migliore per creare un'API è mantenere i livelli piatti. Io voglio fare questo e cercare di capire come costruire un URI in questo modo:

my-domain.int/groups/search?q=my_query 

Il/gruppi parte funziona già con GET, POST, PUT, DELETE e anche la query di ricerca funziona in questo modo:

my-domain.int/groups/search/my_query 

Questo è il codice che uso per l'instradamento in PHP:

$app->get('/groups/search/:query', 'findByName'); 

io proprio non riesco a capire come costruire parametri opzionali con un punto interrogativo nella Slim. Non sono riuscito a trovare nulla su Google.

EDIT: Dal momento che la ricerca non sembra essere adatto per il mio scenario cerco di mostrare un altro modo di quello che voglio realizzare:

Diciamo che voglio ottenere una risposta parziale dal API. La richiesta dovrebbe essere simile che:

my-domain.int/groups?fields=name,description 

Non così:

my-domain.int/groups/fields/name/description 

Come mi rendo conto che nel percorso?

+0

Possibile duplicato: [http://stackoverflow.com/questions/8125064/slim-php-and-get-parameters](http://stackoverflow.com/questions/8125064/slim-php-and-get- parametri) – TPete

risposta

5

i parametri forniti con la stringa di query, i parametri GET, non devono essere specificati nel parametro percorso.Il framework proverà ad abbinare l'URI senza quei valori. Per accedere ai parametri GET è possibile utilizzare l'approccio php serie, che sta utilizzando il superglobale $_GET:

$app->get('/groups/test/', function() use ($app) { 
    if (isset($_GET['fields']){ 
     $test = $_GET('fields'); 
     echo "This is a GET route with $test"; 
    } 
}); 

Oppure si può utilizzare l'approccio del framework, come @Raphael menzionato nella sua risposta:

$app->get('/groups/test/', function() use ($app) { 
    $test = $app->request()->get('fields'); 
    echo "This is a GET route with $test"; 
}); 
+0

Questo ha senso. Grazie per la spiegazione! – Raphael

0

di query di ricerca non è adatto per i parametri url, come la stringa di ricerca potrebbe contenere separatore url (/ nel tuo caso). Non c'è niente di sbagliato da mantenere come parametro di query, non devi spingere questo concetto ovunque.

Ma per rispondere alla tua domanda, parametri opzionali sono risolti come un altro url:

$app->get('/groups/search/:query', 'findByName'); 
$app->get('/groups/search/strict/:query', 'findByNameStrict'); 

EDIT: Sembra che si desidera utilizzare percorsi jolly di Slim. Devi solo assicurarti che ci sia solo una interpretazione del percorso.

$app->get('/groups/fields/:fields+', 'getGroupsFiltered'); 

Il parametro $fields sarà un array.

+0

Grazie, ma questo non risolve il mio problema. Anche pensato che la ricerca potrebbe non essere adatto come scenario. come potrei essere in grado di costruire un URI con il punto interrogativo, come menzionato sopra? Quello che hai suggerito è quello che ho già. – Raphael

3

Ok ho trovato un esempio che fa quello che mi serve il http://help.slimframework.com/discussions/problems/844-instead

Se si vuole costruire uno stile URI come

home.int/groups/test?fields=name,description 

è necessario costruire una disfatta come questo

$app->get('/groups/test/', function() use ($app) { 
    $test = $app->request()->get('fields'); 
    echo "This is a GET route with $test"; 
}); 

Esso fa eco: si tratta di un percorso GET con nome, descrizione

Anche se non è un allineamento almeno posso usare il punto interrogativo. Con caratteri jolly devo usare/

1

Potresti anche avere parametri di percorso opzionali. Questi sono ideali per l'utilizzo di un percorso per un archivio blog. Per dichiarare parametri di percorso facoltativi, specificare il modello di percorso come questo:

<?php 
 
$app = new Slim(); 
 
$app->get('/archive(/:year(/:month(/:day)))', function ($year = 2010, $month = 12, $day = 05) { 
 
    echo sprintf('%s-%s-%s', $year, $month, $day); 
 
});

Ogni segmento di percorso successivo è facoltativo. Questo percorso accetterà le richieste HTTP per:

/archive 
/archive/2010 
/archive/2010/12 
/archive/2010/12/05 

Se un segmento del percorso opzionale viene omesso dalla richiesta HTTP, i valori di default nella firma callback sono utilizzati al posto.

Problemi correlati