Php 10月CMS会议即将开始?
我一直在尝试在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);
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;
}
}