Мы используем композиторы представлений, чтобы очистить наши контроллеры. Мы также используем несколько тем (igaster / laravel-theme). Проблема, с которой мы сталкиваемся с композиторами представлений, заключается в том, что у нас есть несколько страниц с одинаковым именем представления, поэтому применяется неправильный композитор представления.
Вот две отдельные домашние страницы с очень разными данными (потому что это две совершенно разные платформы):
- /resources/themes/platform-1-theme/pages/index.blade.php
- /resources/themes/platform-2-theme/pages/index.blade.php
Таким образом, у них обоих одинаковое имя представления: "pages.index"
Наш ComposerServiceProvider.php выглядит примерно так:
public function boot()
{
View::composer(['pages.index'], 'App\Http\ViewComposers\Platform-1-ViewComposer');
View::composer(['pages.index'], 'App\Http\ViewComposers\Platform-2-ViewComposer');
}
Очевидно, это проблема, потому что оба композитора будут загружены для домашней страницы, даже если это две разные платформы. Есть ли способ условно загрузить только тот, который нам нужен? Насколько мы можем судить, промежуточное ПО не работает с композиторами представлений.
редактировать:
По запросу, вот структура каталогов папки представлений:
- resources/
- views/
- inc/
- breadcrumbs.blade.php
- comments.blade.php
- логин-form.blade.php
- message.blade.php
- pages/
- admin/
- учетная запись/
- inc/
- themes/
- _parents/
- platform1-parent-theme/
- inc/
- footer.blade.php
- header.blade.php
- pages/
- index.blade.php
- news.blade.php
- itinerary.blade.php
- inc/
- platform2-parent-theme/
- inc/
- footer.blade.php
- header.blade.php
- pages/
- index.blade.php
- news.blade.php
- points.blade.php
- inc/
- platform1-parent-theme/
- client1/
- client1-platform1-child-theme/
- inc/
- header.blade.php
- страницы /
- inc/
- client1-platform2-child-theme/
- inc/
- header.blade.php
- страницы /
- inc/
- client1-platform1-child-theme/
- client2/
- client2-platform1-child-theme/
- inc/
- header.blade.php
- pages/
- custompage.blade.php
- inc/
- client2-platform2-child-theme/
- inc/
- header.blade.php
- pages/
- anothercustompage.blade.php
- inc/
- client2-platform1-child-theme/
- _parents/
- views/
Мои клиентские папки расширяют родительскую тему, а папка / resources / views / предназначена для глобальных шаблонов лезвий, используемых на всех платформах. Итак, Laravel в настоящее время сначала ищет представление в дочерних темах, и если он не находит его там, он ищет в своей родительской теме, а если он все еще не находит его там, он ищет его последним в / resources / views / папка.