带有Laravel联系表格的确认警报框

时间:2014-10-31 12:20:39

标签: php laravel blade

我是Laravel的新手,但是设法让联系表单正常工作并在有一些时显示验证错误。

但是我确实有一个问题,并且不知道如何在Laravel中处理它。当发送消息(验证规则通过)时,我想显示一个警告框(Bootstrap样式),说“感谢,已发送消息'。

CODE

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('info@company.com', 'John Doe') -> subject($formData['subject']);
        });

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

如何在Laravel 4中实现这一目标?

3 个答案:

答案 0 :(得分:1)

您可以使用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('info@company.com', '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);
}

您将被重定向到包含会话变量successmessage设置的联系页面。

将它们用于视图中的提醒,例如在Bootstrap警报中:

使用Blade

@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; ?>

如果您正在使用它们,您甚至可以提供成功提醒,信息提醒或任何您想要的提醒。

答案 1 :(得分:0)

当您的数据无效时,您可以使用withErrors()方法将一些数据(错误)传递给您的路线。 您可以对任何类型的数据使用相同的过程。

例如:

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

此方法withMessage()将创建一个新变量message,并将其存储在Session中一个请求周期。

因此,在您的视图中,您可以像这样访问它:

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

答案 2 :(得分:0)

我假设您正在使用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) !!}