Laravel PHP не может заставить try-catch работать с обновленной БД - PullRequest
0 голосов
/ 15 декабря 2018

У меня есть видеофайл для проверки с использованием FFPROBE, я пытаюсь перехватить ошибку, чтобы вместо простого генерирования ошибки она сначала обновляла строку БД, устанавливая ее в состояние 2 (обработано 0 = по умолчанию,обработано 0 = выполнено, обработано 2 = ошибка).

Я пробовал это сначала:

$user     = Auth::user()->id;
$video    = Video::find($videoUploaded->video->id);
$playlist = $video->playlist->id;

...

try {
     //Line 39 $seconds
    $seconds = $ffprobe->format(config('cf.video_disk') . "/$user/$playlist/$video->ts_name")->get('duration');     
} catch (\Exeption $err) {
    $video->processed = 2;
    $video->name      = $err->getMessage();
    $video->url       = $err->getMessage();
    $video->update();
    event(new VideoUpdated($video));
    return $err->getMessage();
}

И также подавление ошибкис @ и перемещением обновления БД в попытке:

try {
    //Line 39 $seconds
    $seconds = @$ffprobe->format(config('wondermark.video_disk') . "/$user/$playlist/$video->ts_name")->get('duration'); //Line 39
    if (FALSE === $seconds) {
        $video->processed = 2;
        $video->name      = $err->getMessage();
        $video->url       = $err->getMessage();
        $video->update();
    }
} catch (\Exeption $err) {
    event(new VideoUpdated($video));
    return $err->getMessage();
}

Оба возвращают ошибку в строке # 39 (см. комментарий выше), и БД не обновляется: (

1 Ответ

0 голосов
/ 15 декабря 2018

Кажется, есть только ошибка в написании Exception, поэтому я думаю, что это сработает:

try {
    $seconds = $ffprobe->format(config('cf.video_disk') . "/$user/$playlist/$video->ts_name")->get('duration');     
    // if no errors
} catch (\Exception $err) {
    // if error happens
    return $err->getMessage();
}

И более рекомендуется, чтобы вы поймали throwables ( PHP: Throwable -Руководство ) вместо exceptions:

try {
    $seconds = $ffprobe->format(config('cf.video_disk') . "/$user/$playlist/$video->ts_name")->get('duration');     
    // if no errors
} catch (\Throwable $throwable) {
    // if error happens
    return $throwable->getMessage();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...