2017-09-26 10 views
1

laravelでuriアクションに問題があります。検証エラーがある場合、フォームはアクションURLにリダイレクトされません

フォームを送信すると、成功した場合は完全なURLにリダイレクトされます。しかし、エラーがあれば、現在のURLアドレスに残ります。

例:http://localhost:8000/test?url=test_sample

と私のフォームは以下のようになります:

現在のURLがある

<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 URLに残ります。それが成功した場合、それは私が上で有効にするには、この機能を必要とするtest?url=action

EDIT

コントローラ

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', '[email protected]'); 

にリダイレクト私のサイト。

誰か知っていますか?

+0

あなたの質問は何ですか?それを行うには、またはいくつかの問題を抱えていますか?何を試しましたか?あなたは私たちにあなたのコントローラも表示する必要があります。なぜなら、ロジックが発生するからです(あなたがJSを検証して送信するのでなければ?) –

+0

uriにリダイレクトしたいのですか?ない。 – smzapp

+0

それでは、問題はありませんか?上記はそのURLに関係なく投稿する必要がありますか?あなたのコントローラではどうなりますか? –

答えて

1

使用しているURL(http://localhost:8000/test?url=test_sample)には、urlというパラメータが含まれています。コントローラには、このパラメータを使用するには、uploadfile()コントローラメソッドに注入$requestオブジェクトから値を取得する必要があります。

$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パラメーターを使用するようには見えません。そうでない場合は、検証文を変更してください。

+0

うわー..ありがとう。 1つの質問、 'withErrors'を使用して以来、ブレードにエラーを表示する方法は? – smzapp

+0

デフォルトでは、Laravelはバリデーションエラーを含むブレードテンプレートに '$ errors'変数を注入します。あなたはそれでできることがたくさんあります。 [the validation docs](https://laravel.com/docs/validation#quick-displaying-the-validation-errors)を参照してください。 –

関連する問題