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

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

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

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

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

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

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

В этом файле:
App / Провайдеры / 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');}}

}

Я зарегистрировал поставщика услуг в моем конфиг / 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 issueif (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 я не могу прочитать ни значения, хранящиеся в Session, ни файлы 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 будет непригодным для использования.

1

Решение

Поскольку сеансы в 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);
}

}

ваш rout.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), чтобы это работало

2

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

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

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

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

0

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