十月CMS会议即将中断?

时间:2018-10-11 20:59:07

标签: php laravel octobercms

我一直试图在10月CMS的插件中创建一个中间件,该中间件从输入中获取一个值并将其存储在会话中,以定期显示在模板中。

中间件功能:

    public function register()
    {
    $this->app->make('Illuminate\Contracts\Http\Kernel')->prependMiddleware('October\Demo\Middleware\StartSession');
    }

在plugin.php中注册中间件

    public function registerMarkupTags()
    {
       return [
           'functions' => [
               'session' => [Session::class, 'get']
            ]
       ];
    }

插件中用于访问会话的方法

<h1>{{ session('foo') }}</h1>

演示主题中的用法

Context ctx = Context.newBuilder("R").allowAllAccess(true).build();
ctx.eval("R", "sum").execute(new int[] {1,2,3});

这在第一次运行时有效。如果我将foo作为查询字符串,则foo将显示在页面上。但是,如果第二次将查询字符串更改为bar,则foo仍会保留在页面上。

以下是新安装的October实例中的问题示例

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

1 个答案:

答案 0 :(得分: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

如有疑问,请发表评论。