检查是否为空或使用try / catch?

时间:2016-01-22 02:56:36

标签: php laravel laravel-5.1 laravel-5.2

我在Laravel 5中启动了一个应用程序,我对该框架相对较新。我正在检查用户的唯一密钥是否在请求中,而我提出的问题可能是跨框架的。我正在查询数据库并使用firstOrFail。我想知道使用try / catch并捕获错误或检查是否为空是否有任何好处?

try {
    User::where('identifier', $request->key)->firstOrFail();        
} catch (Illuminate\Database\Eloquent\ModelNotFoundException $e) {
    // Display error
}

$user = User::where('identifier', $request->key)->first();
if (empty($user)) {
    // Display error
}

2 个答案:

答案 0 :(得分:2)

就问题的try / catch部分而言,我出于几个原因避免使用try / catch。原因很简单,PHP中的try / catch相当慢。最重要的原因是操作可能由于ModelNotFoundException以外的原因而失败,并且您的代码将错过。

答案 1 :(得分:0)

您不应该将密码保存为纯文本,您应该将其哈希。 Laravel有一个hashing类,可用于密码。当您创建新用户时,请执行以下操作:

  public enum Caption {

    // Object types
    // -------------
    Obj1("Obj1"), Obj2("Obj2"), Obj3("Obj3"), Obj4("Obj4"),
    // Menu Bar
    // -------------
    Menu1("Menu1"), Menu2("Menu2"), Menu3("Menu3"), Menu4("Menu4");

    public String Value;

    Caption(String caption) {
      this.Value = caption;
    }

    public static class ObjectTypes {
      public static final Caption Obj1 = Caption.Obj1;
      public static final Caption Obj2 = Caption.Obj2;
      public static final Caption Obj3 = Caption.Obj3;
      public static final Caption Obj4 = Caption.Obj4;
    }

    public static class MenuBar {
      public static final Caption Menu1 = Caption.Menu1;
      public static final Caption Menu2 = Caption.Menu2;
      public static final Caption Menu3 = Caption.Menu3;
      public static final Caption Menu4 = Caption.Menu4;
    }
  } // Caption

并检查凭据是否有效

$user = new User();
...
$user->password = Hash::make($request->get('newPassword'))
$user->save()

有关Authentication

的详细检查文档

修改

对于原始问题,firstOrFail的想法是一些错误将被全局抛出并且可以由一些全局exception handler处理,如果你不需要抛出全局错误,那么使用find() if 语句应该是您所需要的全部内容。