Laravel просмотр композиторов для разных тем, которые используют одни и те же имена, перезаписывают друг друга - PullRequest
2 голосов
/ 26 марта 2020

Мы используем композиторы представления, чтобы помочь очистить наши контроллеры. Мы также используем несколько тем (igaster / laravel -theme). Проблема, с которой мы сталкиваемся с композиторами представлений, состоит в том, что у нас есть несколько страниц с одним и тем же именем представления, поэтому применяется неправильное представление composer.

Вот две отдельные домашние страницы с очень разные данные (потому что это две совершенно разные платформы):

  • / 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');
}

Очевидно, что это проблема, потому что оба композитора будут загружены для домашней страницы, даже если они две разные платформы. Есть ли способ условно загрузить только тот, который мы хотим? Насколько мы можем судить, промежуточное ПО, похоже, не работает с композиторами представлений.


edit:

В соответствии с запросом, вот структура каталогов папок views:

  • resources /
    • views /
      • inc /
        • breadcrumbs.blade. php
        • comments.blade. php
        • login-form.blade. php
        • message.blade. php
      • страниц /
        • admin /
        • account /
    • themes /
      • _parents /
        • platform1-parent-theme /
          • inc /
            • footer.blade. php
            • header.blade. php
          • pages /
            • index.blade. php
            • news.blade. php
            • itinerary.blade. php
        • platform2-parent-theme /
          • inc /
            • footer.blade. php
            • header.blade. php
          • страниц /
            • index.blade. php
            • news .blade. php
            • points.blade. php
      • client1 /
        • client1-platform1-child-theme /
          • inc /
            • header.blade. php
          • страниц /
        • client1-platform2-child-theme /
          • inc /
            • header.blade. php
          • страниц /
      • client2 /
        • client2-platform1-child-theme /
          • inc /
            • header.blade . php
          • страниц /
            • custompage.blade. php
        • client2 -platform2-child-theme /
          • inc /
            • header.blade. php
          • pages /
            • anothercustompage. blade. php

Мои папки клиента расширяют родительский каталог theme, а папка / resources / views / предназначена для глобальных шаблонов блейдов, используемых на всех платформах. Итак, Laravel в настоящее время ищет в дочерних темах первый вид для просмотра, и если он не находит его там, он смотрит в своей родительской теме, а если он все еще не находит его там, то он выглядит последним в / resources / views / folder.

1 Ответ

0 голосов
/ 26 марта 2020

Поскольку у вас разные представления с разными данными, имеет смысл иметь несколько представлений композиторов . Совместное использование одного и того же имени не означает, что им нужно использовать один и тот же composer, вы можете зарегистрировать другое для каждого.

...