Это вилка моего предыдущий вопрос.
На данный момент моя проблема состоит в том, чтобы получить переменную 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',
Ситуация такова:
Я могу напечатать Session :: get (‘themeName’) в любом представлении в любом месте моего приложения.
Я могу также распечатать Cookie — это видно по взглядам
Линия
else {\ Theme :: set (‘Fawkes’);}
меняет тему — но мне нужно отредактировать значение (название темы) вручную, чтобы переключаться между ними. команды в условиях if никогда не работают.
Когда я пытаюсь установить значение сеанса с этой строкой
Session :: put (‘theme’, $ theme);
Ничего не произошло. Но
Session::put('check', 'What the...');
будучи объявленным внутри ServiceProvider, видно по представлениям.
Пожалуйста, помогите мне решить проблему!
Редактировать:
Так как @igaster говорит, сессия не будет работать для меня. Печальный.
Тем не менее, решение Cookies, упомянутое в igaster / themes readme.md, также не работает. Я сделал этот тест:
Хотя в любом файле VIEW этот код
Запрос :: печенье ( ‘THEMENAME’);
Производит ожидаемое значение cookie («Seldon»)
когда я выполняю приведенный ниже код внутри ServiceProvider
$theme = Request::cookie('themeName');
Session::put('theme', $theme);
и затем печатаю переменную Session в VIEW, я получаю вот что:
eyJpdiI6IjU0eUF6Y3YwaGdmSEhaTVplS3hyQ1E9PSI4InZhbHVl5oiMWhQY2hYRjZ6YzBmUjRDSjc5amNXUT09IiwibWFjIjoiMTEyYTeNTc0MjM2ZmE5YzA5OWYwYWE5MjE3OTNhYjZkMTU5NmVmZDcwYTg5YyJ9
Похоже, что Cookie не был разоблачен.
Может кто-нибудь сказать мне, что делать, чтобы получить закодированное значение?
Кроме того, в 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
Сессии не работают внутри поставщика услуг, потому что они инициируются позже в стеке промежуточного программного обеспечения …
Вместо этого вы должны использовать промежуточное ПО
Переместить код в boot()
метод вместо. Это будет выполнено, когда все поставщики услуг будут зарегистрированы:
class ThemeServiceProvider {
public function boot()
{
$theme = Session::get('theme');
}
public function register()
{
// Register any application services here
}
}