Php 10月CMS会议即将开始?

Php 10月CMS会议即将开始?,php,laravel,octobercms,Php,Laravel,Octobercms,我一直在尝试在10月份的CMS插件中创建一个中间件,它从输入中获取一个值,并将其存储在会话中,以便定期在模板中显示 中间件功能: public function handle($request, Closure $next) { session()->put('foo', input('foo')); logger('StartSession: foo: ', [session('foo')]); return $next($request);

我一直在尝试在10月份的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>
{{session('foo')}
这在第一次运行时有效。如果我将foo作为查询字符串,页面上将显示foo。但是,在第二次运行时,如果我将查询字符串更改为bar,则foo会在页面上持续存在

下面是一个新安装的10月份实例中的问题示例


Hmm可能是您的中间件在初始化会话之前执行的,不确定

您可以在执行所有中间件之后添加会话数据

像这样

但请确保会话是如何工作的使用get参数添加会话的,它不会直接反映它将反映在您的下一个请求中。

我还注意到,您没有为输入添加条件,最好添加它,因为如果没有传递任何参数,并且会话数据被不必要地覆盖,它将设置
null


如果有任何疑问,请发表意见。

是的,这是一个解决办法。它确实需要我首先在页面上检查输入,以防它被更改,并且我需要在相同的请求中显示它,然后在输入未设置的情况下从会话中抓取。我确实认为这是一个错误,但我已经提交了一份错误报告。这是一个体面的工作,所以我将投票作为答案,谢谢。我不确定
这不是一个bug
否则会话工作正常,我也使用过会话,它工作正常。但是思想
并没有在中间件中使用
,所以我不能确定它是否是bug,所以…)
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;
  }
}