我是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中实现这一目标?
答案 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);
}
您将被重定向到包含会话变量success
和message
设置的联系页面。
将它们用于视图中的提醒,例如在Bootstrap警报中:
使用Blade
@if(Session::has('success'))
<div class="alert alert-success">
<button type="button" class="close" data-dismiss="alert" aria-hidden="true">×</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">×</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">×</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) !!}