首页 文章

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

提问于
浏览
3

我想创建一个注册验证,

到目前为止,我已经计划好了,我的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

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

    如果用户可以更正缺少的字段,请在视图中输入错误 .

    如果用户无法更正缺少的字段,则抛出异常 . 您如何记录这取决于您,您可能需要或可能不需要告诉用户'something bad happened',具体取决于上下文 .

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

    要旨:

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

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

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

  • 1

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

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

    404 error .

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

相关问题