Получить исключение - PullRequest
       6

Получить исключение

0 голосов
/ 12 октября 2018

У меня есть видео комнаты (через Twig), которые создаются на моей странице, когда пользователи хотят начать видео чат между собой.Когда они покидают комнату, комната удаляется через некоторое время, поэтому, когда я пытаюсь получить к ней доступ, она выдает ошибку ({room_id} не существует}. Ниже приведена функция:

/**
 * @Route("/video/join/{room_name}", name="videochat_join")
 *
 * @param $room_name
 *
 * @return RedirectResponse|Response
 *
 * @throws \Twilio\Exceptions\ConfigurationException
 * @throws \Twilio\Exceptions\TwilioException
 */
public function joinVideo($room_name)
{
    $user = $this->getCurrentUser();
    $twilio = new Client(getenv('TWILIO_API_KEY'), getenv('TWILIO_API_SECRET'));
    $room = $twilio->video->v1->rooms($room_name)->fetch();
    $roomSid = $room->sid;
    $token = new AccessToken(getenv('TWILIO_ACCOUNT_SID'), getenv('TWILIO_API_KEY'), getenv('TWILIO_API_SECRET'), 3600, $user->getEmail());
    $videoGrant = new VideoGrant();
    $videoGrant->setRoom($room_name);
    $token->addGrant($videoGrant);
    return $this->render('chat/video_join.html.twig', [
        'roomSid' => $roomSid,
        'roomName' => $room_name,
        'accessToken' => $token->toJWT(),
    ]);
};

Как я могу поймать, если комната больше не доступна и перенаправить пользователя на 404_room.html.twig? Потому что он не перенаправляет на шаблон по умолчанию 404.

Ошибка:

RestException
Twilio\Exceptions\RestException:
[HTTP 404] Unable to fetch record: The requested resource /Rooms/1_2room808823 was not found

  at vendor/twilio/sdk/Twilio/Version.php:85
  at Twilio\Version->exception(object(Response), 'Unable to fetch record')
     (vendor/twilio/sdk/Twilio/Version.php:109)
  at Twilio\Version->fetch('GET', '/Rooms/1_2room808823', array())
     (vendor/twilio/sdk/Twilio/Rest/Video/V1/RoomContext.php:58)
  at Twilio\Rest\Video\V1\RoomContext->fetch()
     (src/Controller/Chat/VideoController.php:93)
  at App\Controller\Chat\VideoController->joinVideo('1_2room808823')
     (vendor/symfony/http-kernel/HttpKernel.php:149)
  at Symfony\Component\HttpKernel\HttpKernel->handleRaw(object(Request), 1)
     (vendor/symfony/http-kernel/HttpKernel.php:66)
  at Symfony\Component\HttpKernel\HttpKernel->handle(object(Request), 1, true)
     (vendor/symfony/http-kernel/Kernel.php:188)
  at Symfony\Component\HttpKernel\Kernel->handle(object(Request))
     (public/index.php:37)

Я пытался сделать:

    try{
        ($twilio->video->v1->rooms($room_name)->fetch());
        echo "Room exists"; //this one is working fine
}   catch ( TwilioException $e ) {
        echo 'Caught exception: ',  $e->getMessage(), "\n"; //this doesn't
}

... без удачи

1 Ответ

0 голосов
/ 12 октября 2018

Добавьте следующие операторы use в начало класса Controller.

use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
use Twilio\Exceptions\RestException;

Затем поместите код в блок try / catch.Если вы поймаете ожидаемый RestException, вы можете бросить NotFoundHttpException, чтобы вызвать ответ 404.Например:

/**
* @Route("/video/join/{room_name}", name="videochat_join")
*
* @param  $room_name
*
* @return RedirectResponse|Response
*
* @throws \Twilio\Exceptions\ConfigurationException
* @throws \Twilio\Exceptions\TwilioException
*/
public function joinVideo($room_name)
{
    try {
        $user = $this->getCurrentUser();

        $twilio = new Client(getenv('TWILIO_API_KEY'), getenv('TWILIO_API_SECRET'));
        $room = $twilio->video->v1->rooms($room_name)->fetch();
        $roomSid = $room->sid;

        $token = new AccessToken(getenv('TWILIO_ACCOUNT_SID'), getenv('TWILIO_API_KEY'), getenv('TWILIO_API_SECRET'), 3600, $user->getEmail());
        $videoGrant = new VideoGrant();
        $videoGrant->setRoom($room_name);
        $token->addGrant($videoGrant);

        return $this->render('chat/video_join.html.twig', [
            'roomSid' => $roomSid,
            'roomName' => $room_name,
            'accessToken' => $token->toJWT(),
        ]);
    }
    catch (RestException $exception) {
        throw new NotFoundHttpException("'{$room_name}' could not be found");
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...