我在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
}
答案 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()
的详细检查文档
修改强>
对于原始问题,firstOrFail的想法是一些错误将被全局抛出并且可以由一些全局exception handler处理,如果你不需要抛出全局错误,那么使用find() if 语句应该是您所需要的全部内容。