Estoy tratando de entender cómo funcionan las sesiones en Laravel 5 (.4). Por un lado, hay dos formas de usarlos como se describe en la documentación oficial :
Hay dos formas principales de trabajar con datos de sesión en Laravel: el asistente de sesión global y a través de una instancia de Solicitud.
$request->session()->put('key', 'value');y
session(['key' => 'value']);La documentación dice:
Hay poca diferencia práctica entre usar la sesión a través de una instancia de solicitud HTTP y usar el asistente de sesión global.
Pero nunca se explica cuál es la diferencia.
Por otro lado está el "camino de la fachada":
Session::put('key', 'value');Y recientemente encontré esta pregunta de desbordamientode pila Cómo usar la sesión en el controlador laravel 5.2 . train_fox señaló de esta manera:
session()->put('key', 'value');Eso hace un total de cuatro formas. Y no puedo entender por qué o cuándo usar uno u otro. ¿Alguien sabe la diferencia entre esos cuatro?
Por cierto, la única forma en que pude hacer que las sesiones funcionaran con Redis fue con las dos últimas formas.
Gracias de antemano por tu aclaración.
Consideremos primero Facade:
Session::put('key', 'value'); Esta fachada llama a Illuminate\Session\Store::put() .
Ahora consideremos la función session() :
function session($key = null, $default = null) { if (is_null($key)) { return app('session'); } if (is_array($key)) { return app('session')->put($key); } // ... } Al leer esto, podemos suponer que session(['a' => 'b']) funciona de manera similar que session()->put('a', 'b') (porque si es una matriz, llama a put en el misma función).
app('session') devuelve Illuminate\Session\SessionManager ( https://laravel.com/docs/5.4/facades#facade-class-reference ). Illuminate\Session\SessionManager tiene una función __call que, en resumen, llama al controlador de la sesión. Entonces es el mismo comportamiento.
Ahora, la diferencia puede estar en la función $request frente a todas las demás (como está escrito en los documentos). Según el código fuente, devuelve \Symfony\Component\HttpFoundation\Session\SessionInterface . SessionInterface no tiene los mismos métodos que Illuminate\Session\Store así que tal vez sea por eso que difiere.
Esta bien me rindo. Es difícil de entender. No puedo ayudarte más, estoy perdido. Guardo este post por necesidad de historia.