2016-08-20 4 views
0

Я работаю над API Halo 5, и пользователи могут зарегистрироваться с помощью своих игровых тегов. Когда они это сделают, они могут войти в систему, и когда они войдут в систему, они могут перейти в свой профиль, чтобы посмотреть их статистику для Halo 5. Но, очевидно, некоторые пользователи не будут вводить законные игры. И это было, мне нужна какая-то проверка в моем контроллере, которая возвращает представление для профиля.Проверьте, есть ли ошибка 404 в контроллере. Laravel 5

Вот простой пример контроллера:

public function index ($slug) { 

     // Emblem URL. 
     $getPlayerEmblemImage = app('App\Http\Controllers\Api\GetGeneralStatsController')->getPlayerEmblemImage($slug); 

     // Get General Player Arena Stats 
     $playerGeneralStats = app('App\Http\Controllers\Api\GetGeneralStatsController')->getPlayerArenaStats($slug); 
     $playerGeneralStatsArray = $this->getPlayerGeneralStatsArray($playerGeneralStats); 

     // Get the Spartan Rank and XP 
     $spartanRank = json_decode($playerGeneralStatsArray['SpartanRank'], true); 
     $XP = json_decode($playerGeneralStatsArray['Xp'], true); 
     $Gamer_Tag = json_encode($playerGeneralStatsArray['Gamer_Tag'], true); 

     $user = User::whereSlug($slug)->firstOrFail(); 

     return view('profile.index', 
      compact(
       'user', 
       'spartanRank', 
       'XP', 
       'getPlayerEmblemImage', 
       'Gamer_Tag', 
      ) 
     ); 
    } 

Моя проблема, если пользователь не существует, то он выдает эту ошибку:

ClientException in RequestException.php line 107: Client error: GET https://www.haloapi.com/profile/h5/profiles/some%20useer/spartan resulted in a 404 Not Found response:

Как я могу сделать некоторые проверки, и возвращать разные результаты, если этот игрок не найден?

Возможно, что-то вроде этого?

public function index ($slug) { 

    if (// Doesnt exist, show this) { 
    // do some other code here 
    return view('profile.index', compact('user')) 

    } else { 

    // Code here.... 

return view('profile.index', 
      compact(
       'user', 
       'spartanRank', 
      )) 
    } 

} 

ответ

1

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

try{ 
    // Code here.... 

return view('profile.index', 
      compact(
       'user', 
       'spartanRank', 
      )) 
} 
} catch(ClientException $exception) { 
{ 
    // do some other code here 
    return view('profile.index', compact('user')) 
} 

Импорт use GuzzleHttp\Exception\ClientException; в контроллере

использование GuzzleHttp \ Exception \ ClientException;

+0

Позвольте мне попробовать, что – David

+0

Что вы имеете в виду в том комментарии, когда вы говорите ** Заменить Exception с конкретным исключением вы хотите поймать **? – David

+0

вместо исключения, используйте 'NotFoundException' – jaysingkar

0

Got it. Изменение кода в App/Исключения/handler.php

public function render($request, Exception $e) 
    { 
     // Flash a success message saying you have successfully registered. 
     flash()->error('Error', 'That player has not played Halo, or does not exist.'); 

     return redirect()->back(); 

     // return parent::render($request, $e); 
    } 
Смежные вопросы