Intereting Posts
Получение данных из MYSQL в JSON с использованием PHP В PHP есть функция, которая возвращает массив, состоящий из значения ключа из массива ассоциативных массивов? Как получить разницу во времени в минутах в PHP использование памяти массивом PHP при добавлении огромного числового ключа Проверка Symfony2 не работает, когда Entity Relationships / Associations Laravel Eloquent LEFT JOIN WHERE NULL Как получить идентификатор кнопки типа отправки, когда нажата кнопка (PHP + HTML) XML Feeds & PHP – ограничение количества элементов ZF2: Как получить Zend \ Navigation внутри настраиваемого маршрута? Инкрементный вывод – JQuery и PHP Отправить форму с помощью ajax jQuery – получение массива $ _FILES с использованием $ .post vTiger webservice "ACCESS_DENIED: разрешение на выполнение операции отклонено для id" Изучение OO-кодирования с помощью PHP, статические! = Выражения, но в руководстве PHP говорится, что все, что имеет значение, является выражением, смущенным Как получить MAC-адрес клиента при посещении моего веб-сайта?

Темы с пакетом igaster

В настоящее время я реализую темы в своем проекте. Я установил пакет igaster / laravel-theme.

Хотя я могу переключать темы, изменяя тему по умолчанию в config / themes.php, я понятия не имею, как изменить тему sitewide – с помощью такой кнопки:

<a href="set_theme/2">change to 2</a>. 

Автор пакета говорит, что мне нужно использовать ServiceProvide. Я создал его. И что теперь?

Изменить: решение

Основываясь на ответе, предоставленном igaster, я заставил его работать – ЧАСТИЧНО. Это более подробное описание того, что я сделал:

В этом файле: App / Providers / themeSelectServiceProvider.php

 <?php namespace App\Providers; use Illuminate\Support\ServiceProvider; use Session; use Cookie; use Request; 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); if ($theme == 'Fawkes') { \Theme::set('Fawkes'); } if ($theme == 'Seldon') { \Theme::set('Seldon'); } else {\Theme::set('Fawkes');} } } 

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

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

в моем файле маршрутов у меня есть этот маршрут:

Route :: get ('set_theme / {themeName}', 'SitewideController @ set_theme2');

который приводит сюда:

 use Response; use Theme; use Illuminate\Cookie\CookieJar; class SitewideController extends Controller { public function set_theme2($themeName) { \Theme::set('Seldon'); // I tested them one at a time to determine Theme::set('Seldon'); // if there is a classname issue if (Theme::find($themeName)) // Is $themeName valid? { return Redirect::to('/')->withCookie(cookie()->forever('themeName', $themeName)); // this is the only way I am able to create a cookie. Facade DOESN'T WORK! } Redirect::url('boooo'); // my error page } 

Итак, на данный момент я делаю шаг вперед – нижняя строка в моем ServiceProvider меняет тему.

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

Проблема, которая сохраняется:

Внутри ServiceProvider я не могу прочитать ни значение, хранящееся в сеансе, ни какой-либо cookie. Только для целей тестирования я создал

 Session::put('theme', $theme); 

Но переменная Session НИКОГДА не была создана – не с Cookie, а не с Session.

Пожалуйста, помогите, если возможно

Изменить 2:

Я попытался включить ServiceProvider в код ниже:

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

но в результате получается пустой экран (у меня debug = true). В файле журнала я вижу:

local.ERROR: исключение «ReflectionException» с сообщением «Хэш класса не существует»

Laravel 4 был отличным для разработчиков и потрясающим. Laravel 5 уже на холме. Думаю, L6 будет непригодным для использования.

Поскольку сеансы в Laravel5 инициируются в стеке промежуточного программного обеспечения, вы должны создать свое собственное промежуточное программное обеспечение и поместить его в массив $middleware в Kernel.php . Это пример промежуточного программного обеспечения:

 class myMiddleware { public function handle($request, Closure $next) { $themeName = \Session::get('themeName', 'NONE'); if(\Theme::exists($themeName)) \Theme::set($themeName); return $next($request); } } 

ваш route.php может быть чем-то вроде:

 Route::get('setTheme/{themeName}', function($themeName){ Session::put('themeName', $themeName); return Redirect::to('/'); }); Route::get('/', function() { return Theme::get(); // display your views here.... }); 

Обратите внимание, что вам нужно вытащить последнюю версию (v1.0.4), чтобы она работала

Если вы правильно выполнили инструкции по установке ( https://github.com/igaster/laravel-theme ), вы можете изменить тему следующим образом:

 Theme::set('theme-name'); 

Если вы хотите изменить тему, щелкнув ссылку, вы должны где-то сохранить имя текущей темы. Скорее всего, вы не хотите хранить его в URI, поэтому я советую вам сохранить его в сеансе.