我正在构建一个表单,该表单中我要填充表单中的字段(我将其命名为posting.blade.php
)
我为此使用的控制器是:
public function store(Request $request)
{
$this->validate($request, [
'name' => 'required',
'email' => 'required|email',
'number' => 'required',
'city' => 'required',
'post' => 'required'
]);
Mail::send('emails.posting-message', [
'msg'=> $request->message
], function($mail) use($request) {
$mail->from($request->email, $request->name);
$mail->to('helloworld@gmail.com')->subject('Contact Message');
});
return redirect()->back()->with('flash_message', 'Thank you for your message');
}
问题陈述:
当前控制器未返回任何内容,如'msg'=> $request->message
行中所示,validate中没有消息。但是,如果我使用
'msg'=> $request->name
(返回名称)
我想知道我应该在控制器中进行哪些更改,以便它返回验证中存在的每个字段。
我尝试过这个,但是它只返回最后一个值post。
'msg'=> $request->name,
'msg'=> $request->email,
'msg'=> $request->number,
'msg'=> $request->city,
'msg'=> $request->post
答案 0 :(得分:9)
首先,您需要将->withInput()
添加到您的重定向中:
return redirect()->back()->with('flash_message', 'Thank you for your message')->withInput();
这会将所有提交的表单字段刷新到会话中。
重定向后,例如,要获取名称为title
的表单字段的值,可以使用old()
帮助程序,例如:
<input type="text" name="title" value="{{ old('title') }}">
您还可以将第二个参数传递给助手:
<input type="text" name="title" value="{{ old('title', $post->title) }}">
您明白了。
答案 1 :(得分:2)
听起来,您想要做的是从表单提交中获取所有输入,并将它们传递到名为posting-message
的Laravel刀片模板中,该模板用于构建电子邮件。
如果我的理解是正确的,那么您就差不多到了-这只需要您将更多变量传递到您的电子邮件刀片模板中。目前,您只是通过了一个名为 msg 的变量。
因此,控制器的“邮件”部分变为:
Mail::send('emails.posting-message', [
'name'=> $request->name,
'email'=> $request->email,
'number'=> $request->number,
'city'=> $request->city,
'post'=> $request->post
], function($mail) use($request) {
$mail->from($request->email, $request->name);
$mail->to('helloworld@gmail.com')->subject('Contact Message');
});
然后,在您的电子邮件刀片模板中,您可以访问{{ $name }}
,{{ $email }}
等变量。
ps.s。 如果您想获取所有输入并将它们一次性放入控制器中的数组中,则Laravel provides some ways会批量获取输入,例如:
$allInputs = $request->all();
pps 考虑对每个表单输入执行validation而不只是必需,以确保用户提供的数据符合您的期望,并且不是恶意或不正确的。
答案 2 :(得分:2)
首先,您需要检查html中的字段名称,以确保其确切信息没有空格或拼写错误。
第二件事使用以下命令检查所有帖子字段
$request->all();
并查看是否在帖子数组中获得“邮件”索引。
就像没有在验证中添加该字段一样,因此不会在POST中得到它。
但是,当您使用联系表时,应保持“消息”字段为必填字段,并应在验证中添加它。这样,您将始终在消息字段中获得一些数据。
您能否也将HTML张贴在问题中,以便每个人都对它有更多的了解。
对于将已经获取的数据发送到邮件模板的其他问题,可以使用以下方法
$msg = array('name' => $request->name,'email' => $request->email,'number' => $request->number,'city' => $request->city,'post' => $request->post,'message'=>$request->message);
您可以使用像
这样的数组Mail::send('emails.posting-message', [$msg
], function($mail) use($request) {
$mail->from($request->email, $request->name);
$mail->to('helloworld@gmail.com')->subject('Contact Message');
});
然后,您可以轻松访问邮件模板中的所有变量以使其动态化。
答案 3 :(得分:0)
您提供的摘录如下:
'msg'=> $request->name,
'msg'=> $request->email,
'msg'=> $request->number,
'msg'=> $request->city,
'msg'=> $request->post
表示阵列键msg
被覆盖4次。
您将希望采用以下方法:
$msg['name'] = $request->name;
$msg['email'] = $request->email;
$msg['number'] = $request->number;
$msg['city'] = $request->city;
$msg['post'] = $request->post;
答案 4 :(得分:0)
首先,您不需要将back
方法与redirect
一起使用,back()
函数将始终重定向用户。
return back()->with('key','Val');
查看以下内容:Old Input
就像其他人所说的那样,要根据文件名使用withInput()
函数将查询字符串/输入发送到cookie,它将刷新所有当前输入:
return back()->with('key','Val')->withInput();
如果您已经看到Laravel的默认注册和登录刀片,那么您就会知道可以使用old()
帮助程序来基于cookie和会话获取以前的值。
'msg'=> $request->name,
'msg'=> $request->email,
'msg'=> $request->number,
'msg'=> $request->city,
'msg'=> $request->post
有一些方法可以给数组赋值,但是请记住不要这样重写它们!
您可以使用自动索引方法,如果使用$msg[] = $request->bar
,它将索引从0到您的作业长度的值
$data[] = $request->val1;
$data[] = $request->val2;
...
但是您也可以像这样确定每个元素的键:
$data['name'] = $request->name;
$data['email'] = $request->email;
...
毕竟,如果要发送所有输入作为第二个参数,只需使用$request->all()
:
Mail::send('emails.posting-message', $request->all(), function($mail) use($request) {
$mail->from($request->email, $request->name);
$mail->to('helloworld@gmail.com')->subject('Contact Message');
});
答案 5 :(得分:0)
前段时间我遇到了类似的问题,经过几次尝试,我将字段名从SELECT Users.Name,
(SELECT TOP 1 Payment FROM UserPayments
WHERE UserID = Users.UserID AND DateTime Between #01/01/2018# And #04/23/2018#
ORDER BY DateTime DESC)
/
(SELECT TOP 1 Payment FROM UserPayments
WHERE UserID = Users.UserID AND DateTime Between #01/01/2018# And #04/23/2018#
ORDER BY DateTime ASC)
-1 AS PercentChange
FROM Users;
更改为message
,这是解决方案。
我怀疑comments
可能是框架在会话中使用的变量名或类似名称。
希望对您有帮助。
答案 6 :(得分:0)
您需要在返回的响应中添加sns.jointplot(leagueWinners_season['Wins'], leagueWinners_season['Goals'], kind = 'reg', color = 'b')
plt.title('Season Winners Goal and Win Regression', loc = 'right', fontsize = 16)
plt.show()
方法为
withInput()
要在下一个请求中保留来自一个请求的输入,您需要使用return redirect()->back()->with('flash_message', 'Thank you for your message')->withInput();
帮助程序。在https://laravel.com/docs/5.6/requests#old-input
old()
Laravel将自动将用户重定向回其先前的位置。此外,所有验证错误都会自动刷新到会话中。请在https://laravel.com/docs/5.6/validation#quick-displaying-the-validation-errors中查看文档。要显示验证错误消息,您可以这样使用
<input type="text" name="title" value="{{ old('username') }}">
或更具体地说
@foreach ($errors->all() as $error)
<li>{{ $error }}</li>
@endforeach
答案 7 :(得分:0)
据我了解,您在问如何将输入内容发送到邮件模板。
尝试一下
public function store(Request $request)
{
$this->validate($request, [
'name' => 'required',
'email' => 'required|email',
'number' => 'required',
'city' => 'required',
'post' => 'required'
]);
Mail::send('emails.posting-message', $request->all(), function($mail) use($request) {
$mail->from($request->email, $request->name);
$mail->to('helloworld@gmail.com')->subject('Contact Message');
});
return redirect()->back()->with('flash_message', 'Thank you for your message');
}
现在在 emails / posting-message.blade.php 中,您将可以访问$ name,$ email,$ number,$ city,$ post和您在请求中发送的任何其他输入
现在是否要恢复验证错误。用这个
$validator = Validator::make($request->all(), [
'title' => 'required|unique:posts|max:255',
'body' => 'required',
]);
if ($validator->fails()) {
//you can get the errors with $validator->errors. and redirect/mail as you want.
}
//here the inputs are valid.