我是Laravel和网络编程的新手。我在教程中看到讲师,他使用控制器参数将id
传递给控制器
Route::get('/post/{id}', ['as'=>'home.post', 'uses'=>'AdminPostsController@post']);
,与从控制器传递id
到$request
参数相比有什么不同?你能告诉我何时使用控制器参数和请求。
答案 0 :(得分:1)
解释它的一种方法是引用你正在引用的HTTP动词GET。
对于GET请求返回id为1的帖子,您将有两个选项:
/post/{id}
使用此方法(一个宁静的约定),您需要将变量作为参数传递给控制器操作以访问它。
public function view($id)
{
$post = Post::find($id);
...
}
/post?id=1
使用此方法,您可以将id作为查询字符串参数传递到url中。然后在控制器内部访问请求中的值。
public function view(Request $request)
{
$post = Post::find($request->input('id'));
...
}
现在假设您要创建一个新的Post
,它通常是对/post
端点的HTTP谓词POST请求,您可以使用Request
访问表单的有效负载。
public function create(Request $request)
{
$post = Post::create($request->only('description'));
}
现在假设您要更新当前Post
,这通常是对/post/{id}
端点的HTTP谓词PUT请求,您将通过该参数获取模型,然后使用请求。
public funciton update(Request $request, $id)
{
$post = Post::find($id);
$post->update($request->only('description'));
}
因此,您有时也会将控制器参数与请求结合使用。但通常控制器参数用于您需要访问的路径中的单个项目。
答案 1 :(得分:0)
假设您是Web开发的新手,特别是在Laravel,我建议您阅读Laravel documentation。 posts/{id}
检索与该ID对应的帖子模型值。
Route::get('/post/1', 'AdminPostsController@post']); -> returns post that has an ID 1.
向您发送此请求posts/1
时,注入您的模型并返回相应的ID值
或者您可以通过具有相应ID的控制器手动手动。
public function posts(Request $request)
{
returns Posts::find($request->id);
}