Я создаю процесс хранения аналитики (используя упругий поиск), в котором мне нужно добавить элементы, которые будут сохранены в упругом виде, из моего контроллера. Но затем я хочу подождать, пока ответ не будет отправлен пользователю, чтобы фактически выполнить обработку. Я не хочу, чтобы пользователь ждал завершения этого процесса, прежде чем получить ответ от сервера.
Я планирую запустить обрабатывающую часть, используя:
App::finish(function(){
// DO THE PROCESSING
})
Я знаю, что это произойдет после того, как ответ будет отправлен. Однако я не уверен, как получить данные, скомпилированные в контроллере (или любом другом классе), для ссылки в методе закрытия App :: finish ().
Я пытался использовать App::singleton()
но есть много случаев, когда мне нужно иметь возможность постоянно «устанавливать» данные, я не могу просто установить их один раз. Я предполагаю, что по сути ищу глобальную переменную, которой я могу манипулировать, но я знаю, что ее нет в Laravel.
Другой вариант заключается в использовании Session::push()
а также Session::get()
но сейчас у меня есть хранилище сессий, использующее memcached для этого приложения, и я бы не стал делать дополнительный ввод / вывод для memcached, когда я мог просто хранить данные, необходимые для сохранения во временной памяти.
Похоже, мне просто нужен простой контейнер для записи и чтения, который сохраняется только в памяти, но я не могу найти это в документах Laravel.
Вы могли бы использовать __destruct()
магический метод на любых контроллерах, на которых вам нужно выполнить обработку.
Вы также можете потенциально реализовать это в BaseController
а также, если он должен работать для всех контроллеров.
Другой вариант — использовать sqlite в памяти. Просто создайте новое соединение
'sqlite_memory' => array(
'driver' => 'sqlite',
'database' => ':memory:',
'prefix' => '',
),
Тогда вы можете использовать DB::connection('sqlite_memory')
использовать это соединение и сохранять / сохранять все, что вам нужно, с помощью построителя запросов.
Вы можете передать данные в замыкание, используя «использование».
В PHP 5.3.0, что это за функция "использование" идентификатор?
Я закончил тем, что использовал что-то вроде этого для хранения данных в кеше после возврата данных пользователю.
App::finish(function($request, $response) use ($id, $json){
Cache::put('key_'.$id, $json, 1440);
});