Laravel 4: Что передать в качестве параметров классу Url?
Может кто-нибудь объяснить синтаксис класса Laravel 4 UrlGenerator? Я не могу найти его в документации.
У меня есть следующий маршрут:
Route::resource('users', 'UsersController');
Мне потребовалось много времени, чтобы понять, что это:
{{ Url::action('[email protected]', ['users' => '123']) }}
генерирует желаемый html:
http://localhost/l4/public/users/123
Я посмотрел в 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)
.. но это на самом деле не приводит меня дальше.
Что я могу передать как $parameters
?
Теперь я знаю, что ['users' => '123']
работает, но каков фон этого? Есть ли другие способы передачи данных?
Ответы
Ответ 1
На самом деле вам не требуется указывать имя параметра в качестве ключа массива. Насколько я помню, замены будут происходить слева направо, если имена не указаны.
В качестве примера, определение маршрута вашего контроллера ресурсов будет выглядеть примерно так:
/users/{users}
Итак, URL-адрес, сгенерированный как URL::action('[email protected]', ['123'])
, будет генерировать URL localhost/project/public/users/123
, как это уже было для вас.
Так что вы передаете параметры, необходимые для правильного создания URL-адреса. Если ресурс был вложен, определение может выглядеть примерно так.
/users/{users}/posts/{posts}
Чтобы создать URL-адрес, вам необходимо передать идентификатор пользователя и идентификатор сообщения.
URL::action('[email protected]', ['123', '99']);
URL-адрес будет выглядеть примерно так: localhost/project/public/users/123/posts/99
Ответ 2
Ну, есть лучший способ генерации URL-адресов при работе с ресурсами.
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]
Надеюсь, что это прояснит ситуацию. Некоторую документацию по этому вопросу можно найти здесь http://laravel.com/docs/controllers#resource-controllers
Ответ 3
Для тех, кто использует PHP 5.3, это должно быть:
URL::action('[email protected]', array('123') )