Laravel 拉维公司;Ajax发送HTML表单时出错

Laravel 拉维公司;Ajax发送HTML表单时出错,laravel,Laravel,以下是一项行动: public function postMessageAjax(Request $request) { $this->validate($request, [ 'username' => 'required|string|regex:/^[a-zA-Z\d]+$/', 'email' => 'required|string|email', 'homepage' => 'nullable|str

以下是一项行动:

   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请求,并将错误的JSON(如果存在)设置为响应,而不是分别检索表单的HTML代码和每个输入的错误消息。问题是:如果不是通过Ajax,如何强制它以错误的方式呈现视图

更新:这是我想要得到的(表格本身和错误,如果存在):

对于@OuailB:


我刚刚注意到,当我做一个普通的POST请求时,它会通过GET请求将我重定向到同一个页面,因此错误消息似乎实际上出现在GET的正文中,而不是POST中,所以可能没有办法。我会考虑的,谢谢你的帮助

您可以手动创建验证程序,如果失败,则返回您想要的:

$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());
}
请尝试以下代码:

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
@if(计数($errors)>0)
    @foreach($errors->all()作为$error)
  • {{$error}}
  • @endforeach
@恩迪夫
我得到了表单,但是表单中没有错误,虽然应该有。你必须添加一些代码来显示错误,我已经编辑了我的帖子,因此无法确定它在图片中是什么样子的?我刚刚看到BootForm已经有了这个功能,它应该可以正常工作。可以显示渲染视图吗?