2013-10-01 2 views
1

Im работает над проектом symfony2 с пакетом адронов сонаты.Asynchron PDF-генерация при перенаправлении на следующую страницу в приложении symfony2?

У меня есть большой pdf с изображениями для создания после ввода формы и записи в базу данных. Я начинаю создание PDF в конце сохраняющихся данных. После этого пользователь перенаправляется.

Мой план: Я хочу вызвать генерацию pdf-кода после сохранения данных в базе данных. Но перенаправление ожидает, что документ pdf будет готов. Это длится долго. Таким образом, перенаправление должно быть выполнено, и в то же время генерация PDF должна запускаться в фоновом режиме.

Если документ успешно создан, в заголовке должно появиться уведомление.

PDF-создание осуществляется с помощью DOMPDF. Так что это делается непосредственно в php, а не с помощью отдельного инструмента командной строки.

У кого-нибудь есть идеи, как реализовать это?

Я думаю о запросе ajax после завершения перенаправления. Это хороший подход?

+0

См. Этот ответ: http://stackoverflow.com/questions/10868877/how-can-i-do-background-parsing-of-data-with-symfony2. Вы должны получить вдохновение в возможных качественных решениях. – TautrimasPajarskas

ответ

0

Я, наконец, исправить мой вопрос следующим образом:

  1. Регистрация EventListener: Использование EventDispatcher, которое уведомляет специальный e выпустить, когда предмет (предложение, заказ ...) получает инъекцию. На основе этого документа будет предоставлен документ в формате pdf.

    public function onOfferUpdate(OfferEvent $event) 
    { 
        $offer = $event->getOffer(); 
        $em = $this->container->get('doctrine')->getEntityManager(); 
    
        $job = new Job('acme:pdfgenerator:write', array('--entity="'.get_class($offer).'"', '--id='.$offer->getId())); 
        $job->addRelatedEntity($offer); 
        $em->persist($job); 
        $em->flush(); 
    } 
    
  2. Создание акмя: pdfgenerator: команда написать: Создать команду, которая получит запускаемую в терминал, который обрабатывать создание окончательного PDF. Эта команда get вызывается с данным идентификатором объекта. После поиска в базе данных для действительного объекта он будет генерировать PDF-файл и помещать его в файловую систему.

  3. Использование JobQueue: Установите и запустите простой JobQueue (я использую JMSJobQueueBundle).

    app/console jms-job-queue:run # To start listing to the job queue 
    
  4. Дополнительно: Я реализовать запрос AJAX, который получает статус данной работы. Таким образом, пользователь получает флеш-сообщение, если создание документа завершено.

Работы теперь как очарование. Создание PDF-файла будет выполнено в отдельном процессе, и пользователь сможет увидеть следующую страницу, не дожидаясь пары секунд.

0

Считаете ли вы, что используете мероприятия?

Вы можете написать событие так:

class PdfGeneratorListener 
{ 
    public function onPdfReady(EventInterface $event) 
    { 
     // create pdf or whatever 
    } 
} 

И назвав его, когда вы решили:

$eventDispatcher->notify(new Event($pdfcontent, 'pdf.ready')); 
+0

Да, я думал о событиях.Но я думаю, что мне также нужно подождать, пока не будет создан pdf-файл. Или я ошибаюсь? – sensi

+0

Вы можете перенаправить, и когда это произошло (с помощью события), вы запускаете свое настраиваемое событие для создания pdf. Это всего лишь пример, я уверен, что есть другие способы его решения. – Javi

+0

Хорошо, я попробую это через несколько дней. Должен исправить другой материал, а потом я его реализую. Но другие идеи приветствуются :). – sensi

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

  • Нет связанных вопросов^_^