2016-01-22 3 views
1

Я разворачиваю приложение в Laravel 5, и я отношусь к нововведениям относительно нового. Я проверяю, есть ли уникальный запрос пользователя в запросе, и вопрос, который я задаю, может быть через структуру. Я запрашиваю базу данных и используя firstOrFail. Мне было интересно, есть ли какие-либо преимущества при использовании try/catch и улавливания ошибки или проверки, если она пуста?Проверка наличия пустого места или использование 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

Что касается части try/catch вашего вопроса, я бы избегал try/catch по нескольким причинам. Небольшая причина заключается в том, что try/catch довольно медленный в PHP. Большая причина в том, что операция может завершиться ошибкой по причинам, отличным от ModelNotFoundException, и ваш код будет пропустить это.

+0

это! если вы не можете найти пользователя, почему это исключение? вы показываете ошибку пользователю, но в вашей программе нет ошибки, это ошибка уровня бизнес-логики и не имеет ничего общего с исключениями. – vitr

0

Вы не должны сохранить пароли как обычный текст, вы должны хэш его. В Laravel есть класс для hashing, который вы можете использовать для паролей. При создании нового пользователя сделать что-то вроде этого:

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

И проверить, если учетные данные действительны

public function login(Request $request) 
{ 
    $email = $request->get('email'); 
    $password = $request->get('password'); 
    if (Auth::attempt(['email' => $email, 'password' => $password])) { 
     // Authentication passed... 
     return redirect()->intended('some place'); 
    } 
} 

Для более детальной проверки документации для Authentication

Редактировать

Для первоначального вопроса идея firstOrFail заключается в том, что некоторая ошибка будет выбрана глобально и может обрабатываться каким-то глобальным exception handler, если вам не нужно бросать глобальную ошибку, а затем использовать find() и , если оператор должен быть всем, что вам нужно.

+0

Полностью забыл включить хешированную версию, просто немного опустил ее. – Jack

+0

Я должен был включить другой пример, например, найти пользователя. – Jack

Смежные вопросы