在下面的代码中,我使用{!! URL::route('editCatForm',['id'=>$row->id]) !!}
转到带有查询字符串?id=5
的命名路由editCatForm或$row->id
上动态生成的任何内容
@foreach($categories as $row)
<tr>
<td>{{ $count++ }}</td>
<td>{{ $row->category_name }}</td>
<td>{{ $row->category_status }}</td>
<td><a href="{!! URL::route('editCatForm',['id'=>$row->id]) !!}">edit</a> / <a href="{!! URL::route('destroyCat',$row->id) !!}">delete</a></td>
</tr>
@endforeach
我的路线是
Route::get('editCatForm/{id?}',array('uses'=>'Categories@editCat','as'=>'editCatForm'));
但仍显示网址
http://localhost/projects/brainlaratest/editCatForm/2
而不是
http://localhost/projects/brainlaratest/editCatForm?id=2
路线指向功能
public function editCat($id)
{
$catEdit = Category::find(Input::get('id'));
$categories = $this->getCat();
return view('categoriesAddForm',compact('categories','catEdit'));
}
查询字符串在这里不起作用的问题是什么?
答案 0 :(得分:3)
您的网址格式为editCatForm/{id?}
,因此如果您提供了ID,则会尝试将{id}
替换为您的号码,您将获得editCatForm/5
。
问题在于您的控制器操作。 function editCat($id)
已从路由中获取$id
- 您应该仅使用Input::get('id')
替换$id
。
URL::route(...)
即可替换 route(...)
。
如果您想摆脱/id
,可以从路线中移除{id}
,然后route(...)
只会添加?id=5
而不是/5
。您必须从函数中删除$id
参数并通过Request::input('id');
获取ID。
答案 1 :(得分:1)
这就是route()函数的工作方式。
如果您坚持使用查询字符串,那么您需要手动将?= 2附加到URL,而不能基于此进行路由。
构建查询字符串的一种方法就是这样
$params = array('id' => 5);
$queryString = http_build_query($params);
URL::to('projects/brainlaratest/editCatForm?'.$queryString )
答案 2 :(得分:0)
路由是正确的。您的问题是在行动中获得$id
。
由于您已在路线参数中通过$id
,因此您可以在行动中捕获$id
段。
public function editCat($id)
{
$catEdit = Category::find($id); // edit this line.
$categories = $this->getCat();
return view('categoriesAddForm',compact('categories','catEdit'));
}