2013-04-22 15 views
20

Czy ktoś może wyjaśnić składnię klasy Laravel 4 UrlGenerator? Nie mogę znaleźć tego w dokumentacji.Laravel 4: Co przekazać jako parametry do klasy Url?

Mam następującą trasę:

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

zajęło mi dużo czasu, aby dowiedzieć się, że w ten sposób:

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

generuje żądaną HTML:

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

Zajrzałem 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) 

.. ale to tak naprawdę nie prowadzi mnie dalej.

Co mogę przekazać jako $parameters?

Teraz wiem, że działa ['users' => '123'], ale jakie jest tego tło? Czy istnieją inne sposoby przekazywania danych?

Odpowiedz

20

W rzeczywistości nie jest wymagane podawanie nazwy parametru jako klucza tablicy. Zastąpienia będą następować od lewej do prawej, jeśli nie zostaną podane żadne imiona, o ile dobrze pamiętam.

Jako przykład Twój zasób definicja kontrolery trasa będzie wyglądać następująco:

/users/{users} 

Więc URL wygenerowane jak URL::action('[email protected]', ['123']) wygeneruje URL localhost/project/public/users/123, podobnie jak to ma już dla ciebie.

To, co przechodzisz, to parametry wymagane do poprawnego wygenerowania adresu URL. Jeśli zasób był zagnieżdżony, definicja może wyglądać mniej więcej tak.

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

Aby wygenerować adres URL, należy podać zarówno identyfikator użytkownika, jak i identyfikator wpisu.

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

URL będzie wyglądać podobnie localhost/project/public/users/123/posts/99

+0

Dzięki! To wyjaśnia coś. Powód Znalazłem "moja składnia" jest to, że próbowałem: {{Url :: akcja ("UsersController @ show", ['id' => '123'])}} .. i które dało wyjątek "Niektóre obowiązkowe parametry brakuje ("użytkownicy") do wygenerowania adresu URL dla trasy "users.show". " Próbowałem twojego, a to działa! dzięki! – Dirk

+1

Otworzyłem ponownie. Ponieważ to samo pytanie dla HtmlBuilder ... {{Html :: linkAction ("UsersController @ show", ['123'])}} ..nie działa: "Brak niektórych wymaganych parametrów (" użytkownicy ") do wygenerowania adresu URL trasy" users.show "." Czy wiesz, co z tym zrobić? Dzięki! Edycja: nevermind ... HtmlBuilder oczekuje tytułu jako drugiego parametru, a trzeci - identyfikatora użytkownika (w tym konkretnym przypadku). – Dirk

+0

Tak, masz go w jednym! –

3

dla osób korzystających z PHP 5.3, powinno to być:

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

Dobrze istnieje lepszy sposób generowania adresów URL podczas pracy z zasobami.

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] 

Mam nadzieję, że wyczyści to. Niektóre dokumenty na ten temat można znaleźć tutaj http://laravel.com/docs/controllers#resource-controllers

Powiązane problemy