我一直试图在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实例中的问题示例
答案 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
。
如有疑问,请发表评论。