什么时候在Laravel中使用abort(404)?

时间:2015-04-18 05:27:10

标签: php laravel laravel-5

我想创建注册验证,

到目前为止,我已计划好,我的Users表应包含confirmation_code列和confirmed列。已确认的列的默认值为0(布尔值为false)。

我从注册创建新用户,并为他们分配confirm_code。

然后我通过电子邮件向他们发送验证路由的链接,该路由期望查询字符串中包含此confirmation_code。

处理验证请求的方法是检查查询字符串参数(confirmation_code)是否存在。

我的问题是,

如果不存在confirmation_code,我应该使用abort(404)方法吗?或抛出自定义异常?

public function verify($confirmation_code)
{
    if ( ! $confirmation_code ) {

        // abort(404)?
        // or,
        // throw new Exception?

关于何时使用中止方法的一些反馈也将受到赞赏。

2 个答案:

答案 0 :(得分:1)

实际上,您可以选择在项目中实施哪种类型的错误处理和错误记录。

作为建议,我会说使用自定义异常来丢失字段异常。是一个更好的主意。您可以在给定链接中阅读有关404错误的更多信息:

404 error

有关错误记录的更多详细信息,请参阅laravel文档。

答案 1 :(得分:0)

要遵循一条非常简单的规则。

如果用户可以更正丢失的字段,请在视图中输入错误。

如果用户无法更正缺少的字段,则抛出异常。您如何记录这取决于您,您可能需要或可能不需要告诉用户“发生了不好的事情”,具体取决于具体情况。

如果用户正在查找的资源不存在,或者由于某种原因不应该存在于用户,请显示404.经典案例,在/admin中转到路线而不登录。您可以也使用401,但这会产生误导,除非路线在后续请求中接受WWW-Authenticate标题。

要点:

如果由于用户做错事情而出现问题,请告诉用户。

如果由于事情不符合预期而出现问题,请告诉您的日志并(可选)告诉用户。例外是封装所有这些的好方法。

如果某些内容不存在,或者不应该在那里,除非用户更改了关于他们自己或请求的内容,请显示404.