Laravel路由生成的URL末尾带问号的原因是什么?
为什么我的Laravel生成的URL末尾会有问号?
这个问号出现的原因其实很直观,和浏览器处理GET表单的行为直接相关:
核心原因
你的表单默认使用的是GET请求方法,而且表单内部没有任何需要提交的表单字段(比如<input>、<select>这类元素)。当浏览器处理GET类型的表单提交时,即使没有参数要传递,它也会自动在URL末尾添加一个问号,用来标识URL中查询参数部分的起始位置——哪怕这部分是空的。解决办法
针对你的场景(跳转到文件编辑页面,这是一个GET请求的页面路由),最合理的解决方式是把表单换成<a>标签,因为这类页面跳转本来就应该用链接来实现,而非表单:<a href="{{route('files.edit', $file->id)}}" class="btn btn-success btn-sm">Edit file</a>这样生成的URL就会是干净的
http://testproject.local/files/17/edit,不会有多余的问号。如果你一定要保留表单的写法,也可以添加一个隐藏的表单字段(哪怕是无业务意义的),浏览器就会把字段作为参数携带,问号之后会有具体的参数内容;不过这种做法没必要——用链接才是更符合RESTful设计的做法。
额外小提示
你的files.edit路由是用来显示编辑表单的GET路由,这类“获取页面”的操作,用<a>标签是更标准的做法;表单更多应该用在提交数据的场景(比如后续的文件更新操作,应该用PUT/PATCH请求配合表单)。
内容的提问来源于stack exchange,提问作者MovieZ
相关产品推荐
相关产品推荐

