查询字符串在laravel 5中不起作用

时间:2015-04-22 07:10:40

标签: php laravel laravel-5

在下面的代码中,我使用{!! 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'));
}

查询字符串在这里不起作用的问题是什么?

3 个答案:

答案 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'));
}

来源:http://laravel.com/docs/5.0/routing#route-parameters