Использование файлов cookie тоже заняло у меня некоторое время, чтобы понять. Надеюсь, я написал это достаточно ясно для вас. По сути, вы не возвращаете cook ie браузеру, чтобы добавить его в хранилище приложения. Я создал пример страницы, которую вы можете увидеть здесь .
Первый пример - это обычная форма html.
{{ form_open({request:'onSaveItemRedirect'}) }}
<input type="text" name="item_id" value="12345">
<button>Save item</button>
{{ form_close() }}
Эта форма отправляет информацию о публикации в onSaveItemRedirect
. Главное, на что следует обратить внимание, - это очередь повара ie. Это позволяет серверу отправлять Cooker в заголовке с перенаправлением.
function onSaveItemRedirect() {
$item_id = Input::get('item_id');
$cookie = Cookie::forever('saved_item', $item_id);
Cookie::queue($cookie);
return Redirect::refresh();
}
Этот второй пример использует AJAX API и немного сложнее. Обратите внимание, что я использую частичный метод и метод data-request-complete
. Это обновит партиал с использованием функции JavaScript, updateCookie()
, с новым приготовлением ie на AJAX завершено.
<h3 id="cookiePartial">{% partial 'cookie/test' %}</h3>
{{ form_ajax('onSaveItemAjax', {'complete' : 'updateCookie()' }) }}
<input type="text" name="item_id" value="12345">
<button>Save item</button>
{{ form_close() }}
Скрипт:
<script>
function updateCookie() {
$.request('onUpdateCookiePartial', {
update: {'cookie/test': '#cookiePartial'}
});
}
</script>
PHP: Обратите внимание, что вы должны вернуть ответ с информацией о cook ie. Когда ответ возвращается и завершается, API AJAX отправляет запрос на onUpdateCookiePartial()
. При запуске обработчика событий рекомендуется возвращать что-то; в данном случае true
.
function onSaveItemAjax() {
$item_id = Input::get('item_id');
$cookie = Cookie::forever('saved_item', $item_id);
return Response::json(['Success'])->withCookie($cookie);
}
function onUpdateCookiePartial() {
return true;
}