В Laravel, как я могу добавить элементы в массив в контроллере, а затем обработать после ответа через App :: finish ()

Я создаю процесс хранения аналитики (используя упругий поиск), в котором мне нужно добавить элементы, которые будут сохранены в упругом виде, из моего контроллера. Но затем я хочу подождать, пока ответ не будет отправлен пользователю, чтобы фактически выполнить обработку. Я не хочу, чтобы пользователь ждал завершения этого процесса, прежде чем получить ответ от сервера.

Я планирую запустить обрабатывающую часть, используя:

App::finish(function(){
// DO THE PROCESSING
})

Я знаю, что это произойдет после того, как ответ будет отправлен. Однако я не уверен, как получить данные, скомпилированные в контроллере (или любом другом классе), для ссылки в методе закрытия App :: finish ().

Я пытался использовать App::singleton() но есть много случаев, когда мне нужно иметь возможность постоянно «устанавливать» данные, я не могу просто установить их один раз. Я предполагаю, что по сути ищу глобальную переменную, которой я могу манипулировать, но я знаю, что ее нет в Laravel.

Другой вариант заключается в использовании Session::push() а также Session::get() но сейчас у меня есть хранилище сессий, использующее memcached для этого приложения, и я бы не стал делать дополнительный ввод / вывод для memcached, когда я мог просто хранить данные, необходимые для сохранения во временной памяти.

Похоже, мне просто нужен простой контейнер для записи и чтения, который сохраняется только в памяти, но я не могу найти это в документах Laravel.

0

Решение

Вы могли бы использовать __destruct() магический метод на любых контроллерах, на которых вам нужно выполнить обработку.

Вы также можете потенциально реализовать это в BaseController а также, если он должен работать для всех контроллеров.

Другой вариант — использовать sqlite в памяти. Просто создайте новое соединение

    'sqlite_memory' => array(
'driver'   => 'sqlite',
'database' => ':memory:',
'prefix'   => '',
),

Тогда вы можете использовать DB::connection('sqlite_memory') использовать это соединение и сохранять / сохранять все, что вам нужно, с помощью построителя запросов.

0

Другие решения

Вы можете передать данные в замыкание, используя «использование».

В PHP 5.3.0, что это за функция "использование" идентификатор?

Я закончил тем, что использовал что-то вроде этого для хранения данных в кеше после возврата данных пользователю.

App::finish(function($request, $response) use ($id, $json){
Cache::put('key_'.$id, $json, 1440);
});
0

По вопросам рекламы [email protected]