Php Cookie和会话变量部分在ServiceProvider内部工作
这是我的叉子。 到目前为止,我的问题是如何以未删除的形式获取Cookie变量-请参见下面的第6点 我无法设置主题。到目前为止,我已经通过反复试验确定,在我的服务提供商中,我不能使用cookies或会话变量 my ServiceProvider的内容如下所示:Php Cookie和会话变量部分在ServiceProvider内部工作,php,session,laravel,laravel-5,service-provider,Php,Session,Laravel,Laravel 5,Service Provider,这是我的叉子。 到目前为止,我的问题是如何以未删除的形式获取Cookie变量-请参见下面的第6点 我无法设置主题。到目前为止,我已经通过反复试验确定,在我的服务提供商中,我不能使用cookies或会话变量 my ServiceProvider的内容如下所示: if(Auth::check()) { \Theme::set('Seldon'); } App/Providers/themeSelectServiceProvider.php 情况是: 我可以在我的应用
if(Auth::check()) {
\Theme::set('Seldon');
}
App/Providers/themeSelectServiceProvider.php
情况是:
我可以在我的应用程序的任何位置的任何视图中打印会话::get'themeName'
我也可以打印Cookie-它可以在视图中看到
线路
else{\Theme::set'Fawkes';}
更改主题-但我需要手动编辑值主题的名称以在它们之间切换。if条件中的命令永远不起作用
当我尝试使用此行设置会话值时
会话::放置'theme',$theme
什么也没发生。但是
Session::put('check', 'What the...');
在ServiceProvider中声明后,将在视图中看到
当我使用名称空间声明时,会出现错误。这意味着将解析ServiceProvider内容。
请帮我解决这个问题
编辑:
正如@igaster所说,会话对我不起作用。悲哀
不过,igaster/themes readme.md中提到的Cookies解决方案也不起作用。我做了这个测试:
而在任何视图文件中,此代码
请求::cookie'themeName'
生成cookie的预期值Seldon
当我在ServiceProvider中执行以下代码时
$theme = Request::cookie('themeName');
Session::put('theme', $theme);
然后在视图中打印会话变量,我得到如下结果:
if(Auth::check()) {
\Theme::set('Seldon');
}
EYJPDII6IJU0EUF6Y3YWAGDMSEHATVPLS3YQ1E9PSI4INZHBHVL5OIMWHY2HYRJZ6YZBMUJRDSJC5AMNXUT09IIWIBWFJIJOIMTEYTEYNTC0MJM2ZME5YZA50YWYE5MJ5NMVMZDCWYTG5YYJ9
看来饼干并没有脱毛
有人能告诉我如何得到编码值吗
此外,在ServiceProvider中,我无法从数据库中获取主题值
通常,对于登录用户,我会执行以下操作:
$ic = Usersetting::where('user_id',Auth::id())->first();
$theme = $ic->InterfaceComplexity;
\Theme::set($ic->InterfaceComplexity);
但在这里我得到了一个空白屏幕。当我使用如下条件代码时也是如此:
if(Auth::check()) {
\Theme::set('Seldon');
}
local.ERROR:exception'Symfony\Component\Debug\exception\FatalErrorException',消息'Uncaught exception'ErrorException',消息'Undefined property:Symfony\Component\Debug\ExceptionHandler::$charset',位于D:\www!NiePozwalam\vendor\symfony\debug\symfony\Component\debug\ExceptionHandler.php:199
会话在服务提供程序内不工作,因为它们稍后在中间件堆栈中初始化 您应该改用中间件将代码移到引导方法。这将在所有服务提供商注册后运行:
class ThemeServiceProvider {
public function boot()
{
$theme = Session::get('theme');
}
public function register()
{
// Register any application services here
}
}
这不好,因为Cookie解决方案也不起作用。请看一下第6点,我刚刚在上面的初始问题中添加了这一点。我尝试会话的原因是Cookies推荐的切换主题的解决方案不起作用!现在我知道为什么了!我添加了启动函数,并在其中添加了$theme=Request::cookie'themeName';和硬编码\Theme::set'Seldon';得到了一个奇怪的结果。在我看来,命令Theme::get给了我“Seldon”,但主题集不是“Seldon”,而是“Hawkes”。@Peter,因为cookies只能在下一个请求中使用。如果你设置了cookie,你将无法在同一个请求中访问它。我知道。但在我的例子中,饼干是很久以前做的,所以没关系。在唯一一个我可以切换主题的地方——这是公共函数寄存器——我只能得到哈希版本。@Peter如果你可以在register方法中进行切换,那么没有理由不能在boot方法中进行切换。请告诉Laravel创建者。到目前为止,我花了5个小时尝试使用像主题一样简单的sht。我尝试了所有合理或不合理的选择,包括盲目的试错。无论如何,不幸的是,它不起作用。请参阅我的第一条评论-我得到了不一致的结果。解决方案的最佳方法是使register函数读取cookie正确地取消隐藏。至于第6点:只有在服务提供商注册并启动后执行StartSession中间件,才能使用会话。可能您正在获取加密数据。。。。使用cookie或会话的唯一方法是使用自定义中间件。使用artisan make创建一个:中间件myMiddleware