Annywebart
@Annywebart

Проблема с виджетами. Как лучше всего организовать виджеты в Laravel 5.2?

На сайте создана система виджетов, которую я нашла на просторах англоязычного интернета.
В папке app создала папку "Widgets", структура выглядит так:
260649c2699546ad83c2372837f6b62a.PNG

В корне папки "Widgets" создала файл ServiceProvider.php со следующим содержимым:
namespace App\Widgets;

class ServiceProvider extends  \Illuminate\Support\ServiceProvider
{
	public function boot()
	{
		$widgets = config("widget.widgets");
		while (list(,$widget) = each($widgets)) {
			if(is_dir(__DIR__.'/'.$widget.'/Views')) {
				$this->loadViewsFrom(__DIR__.'/'.$widget.'/Views', 'widget.' . $widget);
			}
		}
	}
	
	public function register(){
		
	}
}


В папке конфиг создала файл widgets.php с таким содержимым:
return [
	'widgets' => [
		'menu',
		'slider',
		'carousel',
		'reviews',
		'cart',
		'wishlist',
		'viewed',
		'articles',
	],
];


Пример кода виджета:
namespace App\Widgets\Slider;

class Slider
{
	public function show()
	{
		$items = \App\Models\Slider::whereIsPublished(1)->get();

		return view('widget.slider::index', compact('items'));
	}
}


Вызывается виджет $slider = new Slider(); и в нужном месте $slider->show();

На локалке (Xampp с версией PHP 5.6) всё работает хорошо, но я закинула сайт на шаред хостинг с PHP 7.0.7 и там такая ошибка:
ErrorException in FileViewFinder.php line 112: No hint path defined for [widget.slider]. (View: /home/wearsh00/wear-shop.pp.ua/project/resources/views/index.blade.php)


Подскажите, пожалуйста. Нормальная ли эта система виджетов, или можно сделать красивее и проще?
И из-за чего возникает такая ошибка? Много где искала, но решение так и не нашла.
На всякий случай, настройки хостинга: php70.demo.default-host.net
Спасибо.
  • Вопрос задан
  • 1914 просмотров
Решения вопроса 1
Denwebart
@Denwebart
Проблема в несовпадении регистра. На windows это игнорится, а на шаред хостинге - нет.
Решается исправлением регистра в Widgets/ServiceProvider.php таким образом:
if(is_dir(__DIR__. '/' . ucfirst($widget) . '/Views')) {
    $this->loadViewsFrom(__DIR__. '/'. ucfirst($widget) . '/Views', 'widget.' . $widget);
}
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
Tesla
@Tesla
Точно искали? Есть же готовое рабочее решение arrilot/laravel-widgets
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы