Октябрьские сессии CMS ломаются?
Я пытался создать промежуточное программное обеспечение в плагине в CMS за октябрь, который берет из входных данных значение и сохраняет его в сеансе для периодического отображения в шаблоне.
Функция промежуточного программного обеспечения:
public function handle($request, Closure $next)
{
session()->put('foo', input('foo'));
logger('StartSession: foo: ', [session('foo')]);
return $next($request);
}
Регистрация промежуточного программного обеспечения в plugin.php
public function register()
{
$this->app->make('Illuminate\Contracts\Http\Kernel')->prependMiddleware('October\Demo\Middleware\StartSession');
}
Метод в плагине для доступа к сессии
public function registerMarkupTags()
{
return [
'functions' => [
'session' => [Session::class, 'get']
]
];
}
Использование в демо-теме
<h1>{{ session('foo') }}</h1>
Это работает при первом запуске. Если я поставлю foo как строку запроса, foo отобразится на странице. Однако при втором запуске, если я изменил строку запроса на bar, foo сохраняется на странице.
Вот пример проблемы в недавно установленном экземпляре October
1 ответ
Хм, может быть, ваше промежуточное программное обеспечение выполняется до инициализации сеанса, не уверен
Вы можете добавить свои данные сеанса после того, как все промежуточное программное обеспечение выполнено
class StartSession
{
public function handle($request, Closure $next)
{
$response = $next($request);
// if we do not pass data hold old value
// do not override it with null
if(input('foo')) {
session()->put('foo', input('foo'));
}
logger('StartSession: foo: ', [session('foo')]);
return $response;
}
}
Как это
но убедитесь, что сессия работает, вы добавляете сессию, используя параметры get, это не будет напрямую отражаться в вашем следующем запросе.
Также я заметил, что вы не добавили условие для ввода, лучше добавить его, потому что в противном случае он будет устанавливать null
если параметры не переданы и данные сеанса перезаписываются без необходимости.
если есть сомнения, пожалуйста, прокомментируйте.