2013-04-22 3 views
20

Qualcuno può spiegare la sintassi della classe UrlGenerator di Laravel 4? Non riesco a trovarlo nella documentazione.Laravel 4: cosa passare come parametri alla classe Url?

Ho la seguente percorso:

Route::resource('users', 'UsersController'); 

Mi c'è voluto molto tempo per capire che questo:

{{ Url::action('[email protected]', ['users' => '123']) }} 

genera il codice HTML desiderato:

http://localhost/l4/public/users/123 

ho guardato in UrlGenerator.php

/** 
* Get the URL to a controller action. 
* 
* @param string $action 
* @param mixed $parameters 
* @param bool $absolute 
* @return string 
*/ 
public function action($action, $parameters = array(), $absolute = true) 

.. ma questo non mi porta più lontano.

Cosa posso passare come $parameters?

Ora so che lo ['users' => '123'] funziona, ma qual è lo sfondo di questo? E ci sono altri modi per trasmettere i dati?

risposta

20

In realtà non è necessario fornire il nome del parametro come chiave dell'array. Le sostituzioni avvengono da sinistra a destra se non viene fornito alcun nome, per quanto posso ricordare.

A titolo di esempio, la vostra risorsa definizione controllori percorso sarà simile a questa:

/users/{users} 

Così, un URL generato come URL::action('[email protected]', ['123']) genererà l'URL localhost/project/public/users/123, proprio come ha già per voi.

Quindi, quello che stai passando sono i parametri necessari per generare correttamente l'URL. Se la risorsa è stata annidata, una definizione potrebbe essere simile a questa.

/users/{users}/posts/{posts} 

Per generare un URL è necessario passare sia l'ID utente che l'ID post.

URL::action('[email protected]', ['123', '99']); 

L'URL sarebbe simile localhost/project/public/users/123/posts/99

+0

Grazie! Questo chiarisce qualcosa. Motivo che ho trovato "la mia sintassi" è che ho provato: {{Url :: action ('UsersController @ show', ['id' => '123'])}} .. e che ha dato eccezione "Alcuni parametri obbligatori mancano ("utenti") per generare un URL per il percorso "users.show". " Ho provato il tuo, e funziona! Grazie! – Dirk

+1

Ho riaperto .. Perché la stessa domanda per HtmlBuilder ... {{Html :: linkAction ('UsersController @ show', ['123'])}} ..non funziona: "Mancano alcuni parametri obbligatori (" utenti ") per generare un URL per il percorso" users.show "" Sai cosa fare a riguardo? Grazie! Modifica: non importa ... L'HtmlBuilder si aspetta un titolo come secondo parametro e terzo l'id utente (in questo caso particolare) – Dirk

+0

Sì ce l'hai in uno! –

3

Per coloro che utilizzano PHP 5.3, questo dovrebbe essere:

URL::action('[email protected]', array('123')) 
11

Beh c'è un modo migliore di generare URL quando si lavora con le risorse.

URL::route('users.index') // Show all users links to [email protected] 

URL::route('users.show',$user->id) // Show user with id links to [email protected]($id) 

URL::route('users.create') // Show Userform links to [email protected] 

URL::route('users.store') // Links to [email protected] 

URL::route('users.edit',$user->id) // Show Editform links to [email protected]($id) 

URL::route('users.update',$user->id) // Update the User with id links to [email protected]($id) 

URL::route('users.destroy',$user->id) // Deletes a user with the id links to [email protected] 

La speranza che chiarisce le cose. Alcuni documenti su questo possono essere trovati qui http://laravel.com/docs/controllers#resource-controllers