Октябрьские сессии CMS ломаются? - PullRequest
0 голосов
/ 11 октября 2018

Я пытался создать промежуточное программное обеспечение в плагине в 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.

Вот пример проблемы в новой установленной октябрьской копии

https://github.com/reed-josh/october-session-issue

1 Ответ

0 голосов
/ 15 октября 2018

Хм, возможно, ваше промежуточное программное обеспечение выполняется до инициализации сеанса, не уверен,

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

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, если не передан параметр, а данные сеанса перезаписываются без необходимости.

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

...