Laravel控制器无法识别order表单问题求助
问题分析与修复方案
你遇到的问题主要有两个关键错误,我们一步步来解决:
1. 控制器语法错误(致命问题)
先看你的控制器代码,if语句块闭合后多了一个额外的},这直接导致else if部分不属于store方法的代码块了——Laravel会抛出语法错误,或者这部分代码永远不会被执行。
修复后的控制器代码:
public function store(Request $request) { if ($request->has('order')){ dd('nice'); } else if ($request->has('delete')){ $fileToDelete = $request->input('delete'); Image::where('id', $fileToDelete)->delete(); return redirect('settings/photos'); } }
2. 表单缺少order字段(逻辑问题)
你的order表单里没有任何name="order"的输入元素,所以$request->has('order')永远会返回false,控制器自然识别不到这个请求。
修复后的Blade视图代码(两种方案选其一即可):
方案一:添加隐藏域
<form action="{{route("settings.postphotos")}}" name="order" method="post"> @csrf <!-- 添加这个隐藏域,让请求携带order参数 --> <input type="hidden" name="order" value="1"> <label for="sort">Order by : </label> <select name="sort"> <option value="name">Name</option> <option value="dateAdded">Date added</option> </select> <select name="sortBy"> <option value="asc">Ascending</option> <option value="des">Descending</option> </select> <input type="submit" value="Order" class="settings-photos-delete-btn"/> </form> <form action="{{route("settings.postphotos")}}" method="post" name="delete" class="text-center"> @csrf <input type="hidden" name="delete" value="{{$images->id}}" /> <input type="submit" value="Delete" class="settings-photos-delete-btn"/><br/> </form>
方案二:给提交按钮设置name属性
<form action="{{route("settings.postphotos")}}" name="order" method="post"> @csrf <label for="sort">Order by : </label> <select name="sort"> <option value="name">Name</option> <option value="dateAdded">Date added</option> </select> <select name="sortBy"> <option value="asc">Ascending</option> <option value="des">Descending</option> </select> <!-- 给submit按钮添加name="order" --> <input type="submit" name="order" value="Order" class="settings-photos-delete-btn"/> </form> <form action="{{route("settings.postphotos")}}" method="post" name="delete" class="text-center"> @csrf <input type="hidden" name="delete" value="{{$images->id}}" /> <input type="submit" value="Delete" class="settings-photos-delete-btn"/><br/> </form>
另外补充个小细节:原来select标签里的form="order"是冗余的,因为这些select已经在name为order的表单内部了,去掉不影响功能,反而更简洁。
内容的提问来源于stack exchange,提问作者Paul
相关产品推荐
相关产品推荐

