You've already forked php-flasher
mirror of
https://github.com/php-flasher/php-flasher.git
synced 2026-04-05 12:32:55 +01:00
add FallbackSession for stateless requests in Laravel
This commit is contained in:
@@ -0,0 +1,26 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Flasher\Laravel\Storage;
|
||||
|
||||
final class FallbackSession implements FallbackSessionInterface
|
||||
{
|
||||
/** @var array<string, mixed> */
|
||||
private static array $storage = [];
|
||||
|
||||
public function get(string $name, mixed $default = null): mixed
|
||||
{
|
||||
return \array_key_exists($name, self::$storage) ? self::$storage[$name] : $default;
|
||||
}
|
||||
|
||||
public function set(string $name, mixed $value): void
|
||||
{
|
||||
self::$storage[$name] = $value;
|
||||
}
|
||||
|
||||
public static function reset(): void
|
||||
{
|
||||
self::$storage = [];
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,12 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Flasher\Laravel\Storage;
|
||||
|
||||
interface FallbackSessionInterface
|
||||
{
|
||||
public function get(string $name, mixed $default = null): mixed;
|
||||
|
||||
public function set(string $name, mixed $value): void;
|
||||
}
|
||||
@@ -6,26 +6,45 @@ namespace Flasher\Laravel\Storage;
|
||||
|
||||
use Flasher\Prime\Notification\Envelope;
|
||||
use Flasher\Prime\Storage\Bag\BagInterface;
|
||||
use Illuminate\Contracts\Session\Session;
|
||||
use Illuminate\Session\SessionManager;
|
||||
|
||||
final readonly class SessionBag implements BagInterface
|
||||
{
|
||||
public const ENVELOPES_NAMESPACE = 'flasher::envelopes';
|
||||
|
||||
public function __construct(private SessionManager $session)
|
||||
private FallbackSessionInterface $fallbackSession;
|
||||
|
||||
public function __construct(private SessionManager $sessionManager, ?FallbackSessionInterface $fallbackSession = null)
|
||||
{
|
||||
$this->fallbackSession = $fallbackSession ?? new FallbackSession();
|
||||
}
|
||||
|
||||
public function get(): array
|
||||
{
|
||||
$session = $this->getSession();
|
||||
|
||||
/** @var Envelope[] $envelopes */
|
||||
$envelopes = $this->session->get(self::ENVELOPES_NAMESPACE, []);
|
||||
$envelopes = $session->get(self::ENVELOPES_NAMESPACE, []);
|
||||
|
||||
return $envelopes;
|
||||
}
|
||||
|
||||
public function set(array $envelopes): void
|
||||
{
|
||||
$this->session->put(self::ENVELOPES_NAMESPACE, $envelopes);
|
||||
$session = $this->getSession();
|
||||
|
||||
$session->set(self::ENVELOPES_NAMESPACE, $envelopes);
|
||||
}
|
||||
|
||||
private function getSession(): Session|FallbackSessionInterface
|
||||
{
|
||||
$session = $this->sessionManager->driver();
|
||||
|
||||
if ($session->isStarted()) {
|
||||
return $session;
|
||||
}
|
||||
|
||||
return $this->fallbackSession;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user