Я создаю процесс хранения аналитических данных (используя поиск по эластичности), где мне нужно добавить элементы, которые нужно сохранить в эластичный от моего контроллера. Но затем я хочу подождать, пока ответ не будет отправлен пользователю для фактической обработки. Я не хочу, чтобы пользователь должен был дождаться завершения этого процесса до получения ответа сервера.В Laravel, как я могу добавлять элементы в массив в контроллере, а затем обрабатывать после ответа через App :: finish()
Я планирую запустить часть обработки с помощью:
App::finish(function(){
// DO THE PROCESSING
})
Я знаю, что это будет работать после того, как ответ был послан. Тем не менее, я не уверен, как получить данные, которые были скомпилированы в контроллере (или любом классе) для ссылки в методе закрытия App :: finish().
Я пробовал использовать App::singleton()
, но есть много случаев, когда мне нужно иметь возможность постоянно «устанавливать» данные, я не могу просто установить его один раз. Я предполагаю, что в основном ищу глобальную переменную, с которой я могу манипулировать, но я знаю, что этого не существует в Laravel.
Другой вариант заключается в использовании Session::push()
и Session::get()
, но сейчас у меня есть хранилище сеансов с использованием Memcached для этого приложения, и я предпочел бы не делать дополнительный ввод/вывод на Memcached, когда я мог бы просто быть хранящей данные, необходимые для сохранения в временная память.
Кажется, мне просто нужен простой контейнер для записи и чтения, из которого сохраняется только в памяти, но я не могу найти это в документах Laravel.
Насколько я знаю, вы не можете что-то сделать после того, как запрос был отправлен клиенту. Я думаю, что очереди - это путь ... – lukasgeiter
@lukasgeiter - hmm похоже на 'App :: finish()' будет делать трюк. скрещенные пальцы. – phirschybar
Действительно? Меня это удивляет ... Итак, единственная проблема заключается в использовании данных, установленных в контроллере в 'App :: finish()'? – lukasgeiter