如果存在验证错误,则表单不会重定向到操作网址

时间:2017-09-26 15:25:19

标签: php laravel laravel-5

我在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');

我需要此功能才能在我的网站上生效。

有人知道吗?

1 个答案:

答案 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参数。如果没有,只需更改验证声明。