2016-10-27 15 views
0

私はLaravel 5.2を使用しています。私のインデックスページには、ライトボックスにフォームを表示する新しいエントリを追加するためのボタンがあります。このフォームは、createメソッドを使用して送信されます。Laravel 5.2エラーで返される - どのフォームが送信されたかを知る方法

また、このページには、インラインで編集できる機能があり、更新メソッドを使用して送信される各エントリがあります。

リクエストを介して検証をセットアップしました。これは、誰かが追加で何かを逃したときに、エラーのあるインデックスメソッドにリダイレクトすることを意味します。エラーは、ライトボックスがユーザーによってトリガーされたときにのみ表示されます。

私は$errorsを使用してエラーを確認できますが、作成エラーでライトボックスを表示させるために、作成フォームと更新フォームを区別する方法がわかりません。それを行う方法はありますか?

更新:

提案がリロード問題を回避するためにAJAXを使用しましたが、今私は422リターンを得ている:

AJAX呼び出し:

(function(){ 
    var submitAjaxRequest = function(e){ 
     var form = $(this); 
     var method = form.find('input[name="_method"]').val() || 'POST'; 

     $.ajax({ 
      type: method, 
      url: form.prop('action'), 
      data: form.serialize(), 
      success: function(data){ 
       console.log(data) 
      } 
     }); 

     e.preventDefault(); 
    } 
    $('form[data-remote]').on('submit', submitAjaxRequest); 
})(); 

要求:

public function response(array $errors) 
{ 
    $response = parent::response($errors); 

    if ($this->ajax() || $this->wantsJson()) { 
     return $response; 
    } 

    return $response->with('requestMethod', $this->method()); 
} 

私もajax呼び出しをテストしており、検証規則が満たされてもうまく動作します。入力が正しくないと検証が戻った場合にのみ失敗します。

+0

リクエスト、フォーム、およびコントローラのコードスニペットは、非常に便利です。 – Roman

+0

'ajax'を使用できますか?この方法で、リロードについて心配する必要はありません。 –

+0

@Ross Wilson - ajaxは、問題を取り除いて最も簡単な解決策になるかもしれません。私はそれを実行する前にフォームを区別する別の方法があるのだろうかと思っています。 – TH1981

答えて

1

responseメソッドをオーバーライドして、要求のタイプをフラッシュできます。あなたは、私が上記で

public function response(array $errors) 
{ 
    $response = parent::response($errors); 

    if ($this->ajax() || $this->wantsJson()) { 
     return $response; 
    } 

    return $response->with('requestMethod', $this->method()); 
} 

(AJAXを使用すると、私たちはただ、元の応答を返すことができリロードページを心配する必要はありません。)

を追加することができますRequestクラスで

作成方法にPOST、更新方法にPUTまたはPATHを使用していると仮定しています。これが当てはまらない場合は、要求を区別するのに合理的な方法を使用することができます。あなたは、私は上記のコメントで述べたように、AJAXを使用しようとしている場合は、必ず使用するようにする必要があります

@if(session('requestMethod') == 'POST') 

https://laravel.com/docs/5.2/responses#redirecting-with-flashed-session-data

は、その後、あなたのビューであなたのような何かを行うことができますajax呼び出し内のエラーメソッド:

$.ajax({ 
    type: method, 
    url: form.prop('action'), 
    data: form.serialize(), 
    success: function (data) { 
     console.log('success', data) 
    }, 
    error: function (data) { 
     console.log('error', data) 
    } 
}); 

希望します。

+0

というコンセプトがありますが、実装に問題があります。 rules()関数の下の 'EntryRequest'ファイルにあなたのコードをコピーしました。私はフォームのための適切な安らかな 'POST'と' PUT'メソッドも使用しています。まだ422の回答を得ています。また、Ajax呼び出しの有無にかかわらず、テストするif文の中から 'return $ response;'を移動して変更を試みました。 – TH1981

+0

これに今、ajaxを使っていますか? –

+0

はい私はajaxを使用しており、あなたが提案したスニペット – TH1981

関連する問題