2017-07-12 19 views
0

でHTMLフォームを送信することはアクションです:Laravel&Ajaxはここでエラー

public function postMessageAjax(Request $request) 
{ 
    $this->validate($request, [ 
     'username' => 'required|string|regex:/^[a-zA-Z\d]+$/', 
     'email' => 'required|string|email', 
     'homepage' => 'nullable|string|url', 
     'text' => 'string', 
     'captcha' => 'required|captcha', 
    ], 
     [ 
      'captcha.captcha' => 'The captcha is incorrect', 
      'username.regex' => 'Use English letters and digits only', 
     ]); 

    $message = new Message(); 

    $message->username = $request->get('username'); 

    $message->email = $request->get('email'); 

    $message->homepage = $request->get('homepage'); 

    $message->text = strip_tags($request->get('text')); 

    $message->ip = $request->ip(); 

    $message->browser = get_browser($request->header('User-Agent'))->browser; 

    $message->save(); 

    return view('Guestbook.postMessage'); 
} 

そして、ここでは図である。

{!! BootForm::open(['id' => 'messageForm']) !!} 
{!! BootForm::text('username') !!} 

{!! BootForm::email('email') !!} 

{!! BootForm::text('homepage') !!} 

{!! BootForm::textarea('text') !!} 

{!! captcha_img('flat') !!} 

{!! BootForm::text('captcha') !!} 

{!! BootForm::submit('Send') !!} 
{!! BootForm::close() !!} 

問題はLaravelは何とかそれはAjaxリクエストであると判断していることですフォームのHTMLコードと各入力のエラーメッセージを個別に取得するのではなく、エラーのJSON(存在する場合)をResponseに設定します。問題は、Ajaxを経由していないようなエラーを表示するにはどうすればよいのでしょうか?

UPDATE:これは私が(彼らが存在している場合、フォーム自体とエラー)を取得したいものです。@OuailBについては enter image description here

enter image description here

私はしましたちょうど私が通常のPOST要求をするとき、GET要求を通して同じページにリダイレクトされるので、エラーメッセージが実際にGETの本体に表示されるように見えます。POSTではなく、多分方法はありません。私はあなたの助けに感謝します。

答えて

0

手動でバリデータを作成することができ、そしてそれはあなたが望むものを返す失敗した場合:

$validator = Validator::make($request->all(), [ 
    'username' => 'required|string|regex:/^[a-zA-Z\d]+$/', 
    'email' => 'required|string|email', 
    'homepage' => 'nullable|string|url', 
    'text' => 'string', 
    'captcha' => 'required|captcha', 
    ], 
    [ 
     'captcha.captcha' => 'The captcha is incorrect', 
     'username.regex' => 'Use English letters and digits only', 
    ]); 

if ($validator->fails()) { 
    return Redirect::back() 
       ->withErrors($validator) 
       ->withInput($request->all()); 
} 
0

は、このコードを試してみてください。

public function postMessageAjax(Request $request) 
{ 
    $validator = Validator::make($request->all(), [ 
     'username' => 'required|string|regex:/^[a-zA-Z\d]+$/', 
     'email' => 'required|string|email', 
     'homepage' => 'nullable|string|url', 
     'text' => 'string', 
     'captcha' => 'required|captcha', 
     ], 
     [ 
      'captcha.captcha' => 'The captcha is incorrect', 
      'username.regex' => 'Use English letters and digits only', 
     ]); 

    if ($validator->fails()) { 
     return view('Guestbook.postMessage') 
      ->withErrors($validator); 
    } 

    // Store your message here 
} 

編集: エラーを表示するために、あなたが追加することができますあなたのビューにこのコード:

@if (count($errors) > 0) 
    <div class="alert alert-danger"> 
     <ul> 
      @foreach ($errors->all() as $error) 
       <li>{{ $error }}</li> 
      @endforeach 
     </ul> 
    </div> 
@endif 
+0

I geフォームはありますが、そこにはエラーはありません。 – Razip

+0

あなたはエラーを表示するためにいくつかのコードを追加する必要があります、私は私の投稿を編集しました – OuailB

+0

それは画像にどのようにする方法はありません? – Razip