Laravel 5.2:特定模型的ModelNotFoundException

时间:2016-01-27 22:21:14

标签: php laravel

我对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分开完成,所以如果我试图查找特定的消息,它将无法返回找不到用户的信息吗?

1 个答案:

答案 0 :(得分:0)

您可以创建FormRequest或验证控制器中的用户,而不是将逻辑隐藏在mutator中。

使用验证规则,您可以检查用户存在的输入,并在失败时重定向,或者在您使用ajax请求时使用标头Accept:application / json返回422错误

我强烈建议您阅读有关验证的信息,并查看我在下面链接的具体规则:

https://laravel.com/docs/5.2/validation#rule-exists

然后,一旦你确定用户存在于数据库中(记得在创建时验证用户是唯一的),你可以编写一些逻辑来插入用户id而不是用户名,如果你想要的话当然。