Переменные Cookies и Session работают частично внутри ServiceProvider

Это вилка моего предыдущий вопрос.
На данный момент моя проблема состоит в том, чтобы получить переменную Cookie в хэш-форме — см. Пункт 6 ниже.

Я не могу установить темы. На данный момент я методом проб и ошибок определил, что внутри моего ServiceProvider я не могу использовать файлы cookie или переменные сеанса.

Содержимое моего ServiceProvider выглядит следующим образом:

App / Провайдеры / themeSelectServiceProvider.php

<?php namespace App\Providers;use Illuminate\Support\ServiceProvider;
use Session;
use Cookie;
use Request;
use Auth;

class themeSelectServiceProvider extends ServiceProvider {public function register()
{

// for testing purpose I ignore the variable and hardcode the theme's name
//  just in case I test both with and without backslash
// as the namespaces in L5 tends to be a major pain.
// neither one works.$theme = Session::get('themeName');

// $theme = Request::cookie('themeName');

Session::put('theme', $theme);
Session::put('check', 'What the...');

if ($theme == 'Fawkes') {

\Theme::set('Fawkes');
}
if ($theme == 'Seldon') {

\Theme::set('Seldon');
}

else {\Theme::set('Fawkes');}}

}

Я зарегистрировал поставщика услуг в моем конфиг / app.php файл:

'providers' => [
...
'App\Providers\themeSelectServiceProvider',

Ситуация такова:

  1. Я могу напечатать Session :: get (‘themeName’) в любом представлении в любом месте моего приложения.

  2. Я могу также распечатать Cookie — это видно по взглядам

  3. Линия

    else {\ Theme :: set (‘Fawkes’);}

меняет тему — но мне нужно отредактировать значение (название темы) вручную, чтобы переключаться между ними. команды в условиях if никогда не работают.

  1. Когда я пытаюсь установить значение сеанса с этой строкой

    Session :: put (‘theme’, $ theme);

Ничего не произошло. Но

Session::put('check', 'What the...');

будучи объявленным внутри ServiceProvider, видно по представлениям.

  1. Когда я играю с объявлениями пространств имен, я получаю ошибки. Это означает, что содержимое ServiceProvider анализируется.

Пожалуйста, помогите мне решить проблему!

Редактировать:

Так как @igaster говорит, сессия не будет работать для меня. Печальный.

Тем не менее, решение Cookies, упомянутое в igaster / themes readme.md, также не работает. Я сделал этот тест:

  1. Хотя в любом файле VIEW этот код

    Запрос :: печенье ( ‘THEMENAME’);

Производит ожидаемое значение cookie («Seldon»)

когда я выполняю приведенный ниже код внутри ServiceProvider

$theme = Request::cookie('themeName');
Session::put('theme', $theme);

и затем печатаю переменную Session в VIEW, я получаю вот что:

eyJpdiI6IjU0eUF6Y3YwaGdmSEhaTVplS3hyQ1E9PSI4InZhbHVl5oiMWhQY2hYRjZ6YzBmUjRDSjc5amNXUT09IiwibWFjIjoiMTEyYTeNTc0MjM2ZmE5YzA5OWYwYWE5MjE3OTNhYjZkMTU5NmVmZDcwYTg5YyJ9

Похоже, что Cookie не был разоблачен.

Может кто-нибудь сказать мне, что делать, чтобы получить закодированное значение?

  1. Кроме того, в ServiceProvider я не могу получить значение темы из базы данных
    Обычно для зарегистрированного пользователя я делаю это:

        $ic = Usersetting::where('user_id',Auth::id())->first();
    $theme = $ic->InterfaceComplexity;
    \Theme::set($ic->InterfaceComplexity);
    

но здесь я получаю пустой экран. То же самое, когда я использую условный код следующим образом:

    if(Auth::check()) {
\Theme::set('Seldon');
}

local.ERROR: исключение «Symfony \ Component \ Debug \ Exception \ FatalErrorException» с сообщением «Неполученное исключение« ErrorException »с сообщением« Неопределенное свойство: Symfony \ Component \ Debug \ ExceptionHandler :: $ charset »в D: \ www! NiePozwalam \ поставщик \ Symfony \ Debug \ Symfony \ Component \ Debug \ ExceptionHandler.php: 199

1

Решение

Сессии не работают внутри поставщика услуг, потому что они инициируются позже в стеке промежуточного программного обеспечения …

Вместо этого вы должны использовать промежуточное ПО

0

Другие решения

Переместить код в boot() метод вместо. Это будет выполнено, когда все поставщики услуг будут зарегистрированы:

class ThemeServiceProvider {

public function boot()
{
$theme = Session::get('theme');
}

public function register()
{
// Register any application services here
}

}
0

По вопросам рекламы [email protected]