如何修改「返回列表」URL并添加自定义参数(避免影响表单提交)
如何仅修改Laravel Backpack中「返回列表」的URL并添加参数,不影响表单提交?
问题描述
我需要修改实体页面中「返回列表」的URL,在URL末尾添加自定义参数。尝试了以下代码:
$url = route("content.index") . "?cat=$cat"; $this->crud->setRoute($url);
将这段代码添加到setupCreateOperation和setupUpdateOperation方法中后,「返回列表」的URL确实生效了,但同时表单的URL也被修改(添加了?cat=$cat参数),导致存储内容时出现「405 - method not allowed」错误。请问是否有办法仅修改「返回列表」的链接并添加查询参数,而不影响表单提交?
解决方案
不要使用setRoute(该方法会覆盖整个CRUD操作的路由,包括表单提交路由),直接针对「返回列表」按钮单独修改URL即可:
方法1:使用modifyButton修改默认按钮
在setupCreateOperation和setupUpdateOperation方法中,获取默认的返回按钮并修改其url属性:
// 先获取你的分类参数值 $cat = request()->get('cat'); // 或其他方式获取参数 // 拼接带参数的返回列表URL $backUrl = route('content.index', ['cat' => $cat]); // 修改返回按钮的URL $this->crud->modifyButton('back', function ($button) use ($backUrl) { $button->url = $backUrl; return $button; });
方法2:自定义按钮视图(兼容旧版本)
如果你的Backpack版本没有modifyButton方法,可以直接重新定义返回按钮:
- 在操作方法中移除默认按钮并添加自定义按钮:
$cat = request()->get('cat'); $this->crud->removeButton('back'); $this->crud->addButtonFromView('top', 'back', 'custom_back_button', 'beginning');
- 创建自定义按钮视图文件
resources/views/vendor/backpack/crud/buttons/custom_back_button.blade.php,写入以下内容:
<a href="{{ route('content.index', ['cat' => request()->cat]) }}" class="btn btn-default"><i class="fa fa-angle-left"></i> 返回列表</a>
原理说明
setRoute是用来设置整个CRUD操作的基础路由,会影响表单提交、页面跳转等所有相关路由逻辑。而直接修改按钮的URL,仅针对「返回列表」这一个跳转行为生效,不会干扰表单提交的路由,从根源上避免了405错误。
内容的提问来源于stack exchange,提问作者sfarzoso
相关产品推荐
相关产品推荐

