Окно подтверждения с контактной формой Laravel

Я новичок в Laravel, но мне удалось заставить контактную форму работать и показывать ошибки проверки, когда они есть.

Однако у меня есть одна проблема, и я понятия не имею, как с ней справиться в Laravel. Когда сообщение отправляется (проходят правила проверки), я хотел бы отобразить окно предупреждения (стиль Bootstrap), в котором говорится: «Спасибо, сообщение отправлено».

КОД

public function postContact()
{
    $formData = Input::all();

    // input validator with its rules
    $validator = Validator::make(
        array(
            'name' => $formData['name'],
            'email' => $formData['email'],
            'subject' => $formData['subject'],
            'message' => $formData['message']
        ),
        array(
            'name' => 'required|min:3',
            'email' => 'required|email',
            'subject' => 'required|min:6',
            'message' => 'required|min:5'
        )
    );

    if ($validator -> passes()) {
        // data is valid
        Mail::send('emails.message', $formData, function($message) use ($formData) {
            $message -> from($formData['email'], $formData['name']);
            $message -> to('[email protected]', 'John Doe') -> subject($formData['subject']);
        });

        return View::make('contact');
    } else {
        // data is invalid
        return Redirect::to('/contact') -> withErrors($validator);
    }
}

Как я могу добиться этого в Laravel 4?


person J86    schedule 31.10.2014    source источник


Ответы (3)


Вы можете использовать метод with класса Redirect:

if ($validator -> passes()) {
    // data is valid
    Mail::send('emails.message', $formData, function($message) use ($formData) {
        $message -> from($formData['email'], $formData['name']);
        $message -> to('[email protected]', 'John Doe') -> subject($formData['subject']);
    });

    //Redirect to contact page
    return Redirect::to('/contact')->with('success', true)->with('message','That was great!');
} else {
    // data is invalid
    return Redirect::to('/contact') -> withErrors($validator);
}

Вы будете перенаправлены на страницу контактов с установленными переменными сеанса success и message.

Используйте их для предупреждения в вашем представлении, например. в предупреждении Bootstrap:

с Блэйдом

@if(Session::has('success'))
    <div class="alert alert-success">
        <button type="button" class="close" data-dismiss="alert" aria-hidden="true">&times;</button>
    <strong>Success!</strong> {{ Session::get('message', '') }}
    </div>
@endif

без лезвия

<?php if(Session::has('success')): ?>
    <div class="alert alert-success">
        <button type="button" class="close" data-dismiss="alert" aria-hidden="true">&times;</button>
        <strong>Success!</strong> <?php echo Session::get('message', ''); ?>
    </div>
<?php endif; ?>

Если вы используете их таким образом, вы даже можете предоставлять оповещения об успехе, информационные оповещения или любые оповещения, которые вы хотите.

person amahrt    schedule 31.10.2014

Когда ваши данные НЕДЕЙСТВИТЕЛЬНЫ, вы используете метод withErrors() для передачи некоторых данных (ошибок) на ваш маршрут. Вы можете использовать тот же процесс с любым типом данных.

Например:

return View::make('contact')->withMessage("Thanks, message has been sent");

Этот метод withMessage() создаст новую переменную message и сохранит ее в сеансе на один цикл запроса.

Итак, на ваш взгляд, вы можете получить к нему доступ следующим образом:

@if(Session::has('message'))
<div class="alert-box success">
    {{ Session::get('message') }}
</div>
@endif
person nteath    schedule 31.10.2014

Я предполагаю, что вы используете Bootstrap, поэтому этот ответ покажет сообщение во всплывающем окне (я тестирую его на Laravel 5)

return View::make('contact')->with('message', "Thanks, message has been sent");

Убедитесь, что этот код будет добавлен в нижний колонтитул

<!-- Show Pop up Window if there is message called back -->
<?php
if(session('message'))
{
    echo '<script>
        document.getElementById("popup_message").click();
    </script>';
}
?>

Добавьте эту функцию в helper.php, чтобы вы могли использовать ее в любом месте кода.

function message_pop_up_window($message)
{
  $display = '
  <a class="popup_message" id="popup_message" data-toggle="modal" data-target="#message" href="#"></a>
  <div class="modal fade" id="message" role="dialog">
        <div class="modal-dialog modal-md">
          <div class="modal-content">
            <div class="modal-header">
              <button type="button" class="close" data-dismiss="modal">&times;</button>
              <h4 class="modal-title">Messsage </h4>
            </div>
            <div class="modal-body">
              <p>'.$message.'</p>
            </div>
          </div>
        </div>
      </div>
    </div>';
  return $display;
}

Затем вызовите функцию на вашей странице

  {!! message_pop_up_window($message) !!}
person Ahmed Al Bermawy    schedule 26.04.2016