我对Laravel编码很新,我一直在关注Jeffery Way的Laravel Basics视频。现在,我正在建立自己的网站,允许用户注册,发送和接收消息,并发布到论坛。
我正在设置发送/接收消息并使其运行良好,但我想要做的是防止用户尝试向无效的用户名发送消息。
此表格现在非常基本:' send_to'需要用户名,'标题'和' body'。
我的消息模型有一个mutator,它在数据库中查询该用户名并设置' send_to'字段到该用户的ID。
public function setSendToAttribute($value)
{
$user = User::where('name', $value)->firstOrFail();
$this->attributes['send_to'] = $user->id;
}
如果用户名无效,我想要做的就是捕获异常。我已经使用Handler.php文件完成了以下操作:
public function render($request, Exception $e)
{
if($e instanceof ModelNotFoundException)
return $e->getmessage();
return parent::render($request, $e);
}
所以这很好用,将会返回消息"没有模型[App \ User]的查询结果。我喜欢做的事情是设置它,所以它再次返回到表单,标题和正文填写完毕,并显示一条错误消息,说明用户名没有注册。
另外一个部分是,这可以与所有ModelNotFoundExceptions分开完成,所以如果我试图查找特定的消息,它将无法返回找不到用户的信息吗?
答案 0 :(得分:0)
您可以创建FormRequest或验证控制器中的用户,而不是将逻辑隐藏在mutator中。
使用验证规则,您可以检查用户存在的输入,并在失败时重定向,或者在您使用ajax请求时使用标头Accept:application / json返回422错误
我强烈建议您阅读有关验证的信息,并查看我在下面链接的具体规则:
https://laravel.com/docs/5.2/validation#rule-exists
然后,一旦你确定用户存在于数据库中(记得在创建时验证用户是唯一的),你可以编写一些逻辑来插入用户id而不是用户名,如果你想要的话当然。