检查控制器中是否存在404响应错误 - Laravel 5

时间:2016-08-20 03:01:16

标签: php laravel http-status-code-404

我正在使用Halo 5 API,用户可以注册他们的游戏玩家标签。当他们这样做时,他们可以登录,当他们登录时,他们可以访问他们的个人资料来查看他们的Halo 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',
            )
        );
    }

我的问题是,如果用户不存在,则会抛出此错误:

  

RequestException.php第107行中的ClientException:   客户端错误:GET https://www.haloapi.com/profile/h5/profiles/some%20useer/spartan导致404 Not Found响应:

如果找不到该播放器,我如何进行一些检查并返回不同的结果?

也许是这样的?

 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',
            ))
  }

}

2 个答案:

答案 0 :(得分: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;

答案 1 :(得分:0)

知道了。更改App / Exceptions / 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);
    }