2013-08-18 4 views
3

Я хочу вернуть окончательный ответ пользователю, прежде чем я сделаю все данные жесткой обработки.Код symfony после ответа ответа

Я хочу, чтобы просто получить запрос от пользователя, возвращает ответ, это может быть простой JSON,

и чем пользователь будет видеть данные, но в моей стороне сервера я буду продолжать свою оставшуюся обработки, вызова аналитики, изменения БД и других.

что-то нравится эта идея: continue processing php after sending http response

+2

Возможный дубликат [кода запуска Symfony после отправки ответа] (https://stackoverflow.com/questions/35219537/symfony-run-code-after-response-was-sent) – Omn

ответ

3

Для более тяжелых задач, которые вы должны использовать kernel.terminate Event. Поэтому любая задача в этом случае выполняется после отправки ответа. Это способ, как работает катушка памяти swiftmailer.

-1

Отъезд StreamedResponse:

$response = new StreamedResponse(); 
$response->setCallback(function() { 
    echo 'Hello World'; 
    flush(); 
    sleep(2); 
    echo 'Hello World'; 
    flush(); 
}); 
$response->send(); 

Подробнее здесь: http://symfony.com/doc/current/components/http_foundation/introduction.html#streaming-a-response

Хотя этот метод имеет свою простоту и полезность в некоторых случаях, это не лучший пользовательский интерфейс на веб-странице. HTML-страница будет полностью загружена только в конце вашего сценария, что может вызвать зрительные раздражения и отсутствие поддержки Javascript, неполную визуализацию CSS и т. Д.

Если вы идете на лучшее визуальное восприятие, вы можете загрузить пустую страницу, а затем сделать одновременные вызовы ajax, которые будут выполнять обработку. то есть. каждый запрос AJAX обрабатывает 5 записей и выводит их.

Таким образом, вы можете иметь прогресс бар или какой-либо другой анимации происходит страницы ...

+0

большое спасибо за это! –

+0

StreamedResponse не думает о выполнении задач после него. –

+0

@Pazi: Как я уже сказал в своем ответе, он имеет свою полезность в определенных случаях, но часто вы хотите предоставить обратную связь о обработке, чтобы ajax был лучше подходит. Это действительно зависит от того, чего именно вы хотите достичь. – Webberig

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