Cook ie не сохраняется в OctoberCMS - PullRequest
0 голосов
/ 16 июня 2020

Я пытаюсь сохранить элемент в cook ie через octobercms ajax, но cook ie не сохраняется:

HTML

<button
    data-request="onSaveItem"
    data-request-data="item_id: 12345">Save item</button>

PHP

function onSaveItem() {
    $item_id = Input::get('item_id');
    Cookie::forever('saved_item', $item_id);
}

Итак, когда я пытаюсь получить повар ie в начале страницы, он возвращает NULL:

function onStart() {
    var_dump(Cookie::get('saved_item'));
}

// output: NULL

Ответы [ 2 ]

1 голос
/ 17 июня 2020

Вам просто нужно поставить его в очередь и убедиться, что вы не выходите из своего кода php после этого, так как cook ie будет отправлена ​​обратно клиенту с использованием ответа.

Cook на стороне сервера ie you не может прочитать его со стороны клиента, вы можете получить доступ и прочитать его только со стороны сервера

function onSaveItem() {
    $item_id = Input::get('item_id');
    Cookie::queue(Cookie::forever('saved_item', $item_id));
    return Response::json(['success' => true], 200);
}

Если вы хотите только готовить на стороне клиента ie, вы можете использовать это, вы не можете прочитать его с сервера

Думаю, это очень просто, потому что готовить ie на стороне клиента, вы можете легко манипулировать им на стороне клиента.

<button
  data-request="onSaveItem"
  data-request-data="item_id: 12345"
  data-request-success="document.cookie = 'saved_item=222; expires=Fri, 31 Dec 9999 23:59:59 GMT';"
>
  Save item
</button>

Он будет хранить повар ie в течение максимального времени, например навсегда :)

Вы также можете использовать другие атрибуты API, такие как data-request-error или data-request-complete (both case error or success), чтобы сохранить свой повар ie.

, если есть сомнения прокомментируйте пожалуйста.

1 голос
/ 16 июня 2020

Использование файлов 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;
}
...