2016-01-26 5 views
1

Я пытаюсь настроить работу, которая использует фасад Storage. К сожалению, это не работает и бросает исключение.Laravel с использованием фасадов в задании

Сериализация 'Symfony \ Component \ HttpFoundation \ File \ File' не разрешено

class MoveMusicToRemoteStorage extends Job implements SelfHandling, ShouldQueue 
{ 
    use InteractsWithQueue, DispatchesJobs; 

    private $audio; 

    public function __construct(AudioFile $audio) 
    { 
     $this->audio = $audio; 
    } 

    public function handle() 
    { 
     Storage::disk('s3')->put('/audio/' . $this->audio->file()->getFilename(), file_get_contents($this->audio->getPath())); 
    } 

} 

Как я могу использовать Facade в работе?

EDIT

Я прочитал this post, но я не являюсь владельцем файла класса, так что я не могу сделать это Сериализуемым.

+0

Возможный дубликат [Сериализация «Symfony \ Component \ HttpFoundation \ File \ UploadedFile» не разрешена] (http://stackoverflow.com/questions/23512381/serialization-of-symfony-component-httpfoundation-file-uploadedfile -is-not-all) –

+0

@MahmoudTantawy no это не то же самое, что и мой вопрос – Wasim

+0

Это, потому что в этом проблема. Прочтите сообщение об исключении. –

ответ

2

Проблема в том, что вы передаете объект File конструктору задания, и файл не может быть сериализован. Это не имеет никакого отношения к фасаду. Вы можете использовать фасад так, как есть, но чтобы обойти проблему, вам нужно передать ссылку на нужный файл (например, его имя/путь к файлу), а затем извлечь файл через фасад File в свой handle() метод:

class MoveMusicToRemoteStorage extends Job implements SelfHandling, ShouldQueue 
{ 
    use InteractsWithQueue, DispatchesJobs; 

    private $audio_file_path; 

    public function __construct($audio_file_path) 
    { 
     $this->audio_file_path = $audio_file_path; 
    } 

    public function handle() 
    { 
     $audio_file = Storage::get($this->audio_file_path); 

     Storage::disk('s3')->put('/audio/' . $audio_file->file()->getFilename(), file_get_contents($audio_file->getPath())); 
    }  
} 

Если вы делаете это с загрузкой файла, вы, вероятно, захотите не использовать задание. Загрузка файлов хранится во временном каталоге, и файл может исчезнуть, прежде чем у вас появится возможность переместить его на S3, если задание должно быть поставлено в очередь.

+0

В качестве сообщения о возникновении исключения: проблема заключается в том, что «Файл» не может быть сериализован, не имеет ничего общего с фасадами. –

+0

Не уверен, что вы получаете. Я понимаю, что это не имеет ничего общего с фасадами. Я упоминаю об этом в своем ответе. Название OP, однако, похоже, что все вопросы касаются фасадов. –

+0

Да, это было нацелено на ОП, а не на тебя. Было просто повторение того, что вы сказали :) –

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