我正在创建一个由时事通讯电子邮件发送的调查,基本上应用程序会根据用户的电子邮件记录用户数据,如果电子邮件不存在于该路线中是不可能填写调查的,但我不完全确定如果我正确地做到这一点并且出于安全目的,也许我应该对电子邮件进行某种验证。有人可以告诉我什么是最好的做法或者我正在做的方式已经好了吗?!
用户输入的网址如下:
http://domain.com/surveys/23/email@hotmail.com/show
这是我的代码:
路线:
Route::get('surveys/{id}/{email}/show/', 'SurveyController@show');
控制器:
public function show($id,$email)
{
$survey = Survey::find($id);
$email = $email;
return view('admin.surveys.show', compact('survey','email'));
}
查看:
Html
...
@if(!empty($email))
show the survey form
@else
A message saying is not possibile fill without a email
@endif
注意:调查完全是时事通讯系统的一部分,它们之间不能有任何形式的整合。
答案 0 :(得分:1)
当然,您应该验证是否提供了电子邮件。在控制器中你应该像这样检查:
$this->validate($request, [
'email' => 'required|email|exists:users,email',
]);
上面的示例将确保提供电子邮件(必需),如果实际上是电子邮件,并且数据库中存在电子邮件(表用户,列电子邮件)。
您可以在documentation中详细了解相关信息。如果我错过了任何可以使用的规则,您还可以在此页面上查看所有可用的规则。
编辑:还请记得添加“请求$请求”作为方法参数,如下所示:
public function show(Request $request, $id,$email) {...}
答案 1 :(得分:0)
关于Larans sugegstion也要注入请求..也许你在show方法中不需要它。如果您觉得它与您的代码混淆,可能会将其注入构造函数中......
private $request;
public function __construct(Request $request)
{
$this->request = $request;
}
并在show方法中进行验证,