2016-01-11 1 views
4

Я хочу установить файл cookie в обычное промежуточное программное обеспечение Laravel. Идея состоит в том, чтобы установить значение cookie в любое время, когда пользователь посещает мой сайт через любую целевую страницу.Настройка Cookie в Laravel Custom Middleware

Так что я сделал, я создал промежуточное программное обеспечение под названием UUIDMiddleware. Я использую это промежуточное программное обеспечение вместе с промежуточным программным обеспечением Интернета на своих маршрутах. Ниже приведен его код из промежуточного программного обеспечения.

if($request->hasCookie('uuid')) 
{ 
    return $next($request);  
} 
else 
{ 
    $uuid = Uuid::generate(); 
    $response = new Response(); 
    return $response->withCookie(cookie()->forever('uuid', $uuid)); 
} 

Как вы можете видеть, я проверяю, существует ли файл cookie. Если нет, я передаю управление следующему запросу.

Проблема заключается в настройке файла cookie с использованием return $response, я не могу передать управление следующему запросу. Как это разрешить?

Что происходит в этом случае, если cookie не установлен, он устанавливает cookie и появляется пустой экран. Если я обновляюсь, я вижу веб-сайт с набором файлов cookie.

Должен быть способ установить cookie с использованием промежуточного программного обеспечения в правильном направлении. Как мне это сделать?

ответ

6

Вы можете получить объект ответа в middleware так:

public function handle($request, Closure $next) 
{ 
    $response = $next($request); 

    // Do something after the request is handled by the application 

    return $response; 
} 

Так что вы могли бы сделать что-то вроде этого

if($request->hasCookie('uuid')) { 
    return $next($request);  
} 

$uuid = Uuid::generate(); 
$response = $next($request); 
return $response->withCookie(cookie()->forever('uuid', $uuid)); 
+1

Это, кажется, не работает больше. Вызов '$ next ($ request)' независимо от того, возвращаете ли вы его или нет, вырывается из метода handle и продолжает запрос. – Chris

+0

@Chris Это неправда (по крайней мере, для Laravel 5.4). Вы уверены, что вы зарегистрировали промежуточное ПО? – Boyd

+0

@Boyd промежуточное программное обеспечение было зарегистрировано. То, что мне нужно было сделать, это вернуть $ next ($ request) -> withCookie() и предоставить мой объект cookie. На самом деле кажется, что cookie не переносится, если явно не определено – Chris