2017-07-12 4 views
0

Hier ist eine Aktion:Laravel & Ajax mit Fehlern HTML-Formular sendet

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'); 
} 

Und hier ist die Ansicht:

{!! 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() !!} 

Das Problem ist, dass Laravel bestimmt irgendwie, dass das ist eine Ajax-Anfrage und Setzen Sie ein JSON von Fehlern (wenn sie vorhanden sind) auf Response, anstatt HTML-Code des Formulars und Fehlermeldungen für jeden einzelnen Eingang abzurufen. Die Frage ist: Wie zwinge ich es dazu, die Ansicht mit Fehlern zu rendern, als wäre es nicht über Ajax?

UPDATE: das ist, was ich (das Formular selbst und Fehler, wenn sie vorhanden sind) erhalten möchten: enter image description here

Für @OuailB:

enter image description here

Ich habe habe gerade bemerkt, dass wenn ich eine normale POST-Anfrage mache, es mich auf die gleiche Seite durch eine GET-Anfrage weiterleitet, so scheint es, als ob die Fehlermeldungen tatsächlich im Körper des GETS erscheinen, nicht POST, also gibt es vielleicht keinen Weg. Ich werde darüber nachdenken, danke für deine Hilfe!

Antwort

0

Sie können Validator manuell erstellen, und wenn es zurückgibt, was Sie wollen:

$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

diesen Code Versuchen:

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 
} 

Edit: Für die Fehler anzuzeigen, können Sie hinzufügen Dieser Code in Ihrer Sicht:

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

ich ge t das Formular, aber es gibt keine Fehler darin, obwohl es sein sollte. – Razip

+0

Sie müssen Code hinzufügen, um die Fehler anzuzeigen, habe ich meinen Beitrag bearbeitet – OuailB

+0

So gibt es keine Möglichkeit, wie es im Bild ist? – Razip