Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Cookie和会话变量部分在ServiceProvider内部工作_Php_Session_Laravel_Laravel 5_Service Provider - Fatal编程技术网

Php Cookie和会话变量部分在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 情况是: 我可以在我的应用

这是我的叉子。 到目前为止,我的问题是如何以未删除的形式获取Cookie变量-请参见下面的第6点

我无法设置主题。到目前为止,我已经通过反复试验确定,在我的服务提供商中,我不能使用cookies或会话变量

my ServiceProvider的内容如下所示:

    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