我在laravel中遇到了uri行动的问题。
当我提交表单时,如果成功,它会重定向到完整的URL。但是如果有错误,它仍然是当前的URL地址。
示例:
当前网址为:http://localhost:8000/test?url=test_sample
我的表单如下所示:
<form action="{{ url('test?url=action') }}" method="POST" enctype="multipart/form-data">
{{ csrf_field() }}
<input type="file" name="pdf_file">
<input type="submit" name="submit" value="Submit"/>
</form>
如果上述表单包含错误,则会保留test?url=test_sample
个网址。如果成功,则会重定向到test?url=action
修改
控制器
class MyFormController extends Controller
{
public function uploadfile(Request $request)
{
$this->validate($request, [
'pdf_file' => 'required|mimes:pdf|max:5000'
]);
return 'uploaded';
}
}
web.php
Route::post('/test', 'MyFormController@uploadfile');
我需要此功能才能在我的网站上生效。
有人知道吗?
答案 0 :(得分:1)
您正在使用的网址(http://localhost:8000/test?url=test_sample
)包含url
参数。要在控制器中使用此参数,您需要从注入$request
控制器方法的uploadfile()
对象中获取值:
$request->get('url');
您可以在处理上传后使用它从uploadfile()
控制器方法重定向用户:
public function uploadfile(Request $request)
{
// ...
return redirect($request->get('url'));
}
因为您在控制器方法中使用validate()
方法,所以如果验证失败,请求将自动重定向。您可以将其替换为手动验证以自行处理结果:
$validator = Validator::make($request->all(), [
'pdf_file' => 'required|mimes:pdf|max:5000',
]);
if ($validator->fails()) {
return redirect($request->get('url'))
->withErrors($validator)
->withInput();
}
return redirect($request->get('url'));
编辑 - 我想我误解了你的部分问题。看起来您不想在控制器方法中使用url
参数。如果没有,只需更改验证声明。