Laravel 4:将什么作为参数传递给Url类?

时间:2013-04-22 07:43:12

标签: laravel laravel-4

有人可以解释Laravel 4 UrlGenerator类的语法吗?我在文档中找不到它。

我有以下路线:

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

我花了很长时间才弄明白:

{{ Url::action('UsersController@show', ['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']有效,但这背景是什么?还有其他传递数据的方法吗?

3 个答案:

答案 0 :(得分:20)

实际上并不需要将参数的名称作为数组的键。如果没有提供名字,替换将从左到右发生,据我所知。

例如,您的资源控制器路由定义将如下所示:

/users/{users}

因此,像URL::action('UsersController@show', ['123'])这样生成的网址会生成网址localhost/project/public/users/123,就像它已经为您提供的那样。

因此,您传入的是正确生成URL所需的参数。如果资源是嵌套的,那么定义可能看起来像这样。

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

要生成网址,您需要传递用户ID和帖子ID。

URL::action('UsersPostsController@show', ['123', '99']);

网址看起来像localhost/project/public/users/123/posts/99

答案 1 :(得分:11)

在使用资源时,有一种更好的方法可以生成URL。

URL::route('users.index') // Show all users links to UserController@index

URL::route('users.show',$user->id) // Show user with id links to UserController@show($id)

URL::route('users.create') // Show Userform links to UserController@create

URL::route('users.store') // Links to UserController@store

URL::route('users.edit',$user->id) // Show Editform links to UserController@edit($id)

URL::route('users.update',$user->id) // Update the User with id links to UserController@update($id)

URL::route('users.destroy',$user->id) // Deletes a user with the id links to UserController@destroy

希望能够解决问题。有关此问题的一些文档可以在http://laravel.com/docs/controllers#resource-controllers

找到

答案 2 :(得分:3)

对于使用PHP 5.3的用户,应该是:

URL::action('UsersController@show', array('123') )