Где должно храниться значение, используемое Laravel View Composer - PullRequest
0 голосов
/ 23 апреля 2020

Я пытаюсь сохранить значение, которое можно применить к любому экземпляру конкретного включаемого представления (и обновлять это значение каждый раз, когда оно включается). Представление является частичным, его можно многократно включать по всей странице и использовать где угодно, и значение просто для того, чтобы я мог применить разные классы CSS к каждому, в качестве простого примера:

<div class="my-class-name-{{$variable}}">
    <!-- Content -->
</div>

ПРИМЕЧАНИЕ. Это не должен быть уникальный идентификатор, например, если бы у меня было 3 варианта CSS, класс $variable будет когда-либо рассчитываться только до 3, а затем сбрасываться до 1 (при необходимости повторяется). Это означает, что мне нужно хранить максимальное значение и чуть-чуть логик c рядом с моей переменной.

Так что при поиске я нашел потенциальное решение в виде View Composer, которое может связывайте переменную каждый раз, когда визуализируется представление - что кажется идеальным для этой проблемы. Пример:

/ app / Http / View / Composrs / View Composer

class ViewComposer
{

    //...

    public function compose(View $view)
    {
        $view->with('variable', $value);
    }
}

/ app / Providers / AppServiceProvider

    // ...

    public function register()
    {
        View::composer(
            'newname', 'App\Http\View\Composers\ViewComposer'
        );
    }

Кажется великолепным, и если я когда-нибудь захочу сделать это более сложным, я могу легко расширить его в представлении Composer.

Так что мой вопрос теперь звучит так: Мне нужно хранить $value где-нибудь - но где лучше?

Модель не имеет смысла для меня, потому что использование таблицы базы данных для счетчика кажется излишним. Я мог бы отследить его в контроллере, но разговор ViewComposer напрямую с контроллером кажется мне плохой практикой, и поскольку это представление может быть включено везде, где это значение должно в основном существовать в каждом контроллере и передаваться каждому представлению - кажется беспорядочный.

Будет работать свойство stati c в самом ViewComposer, и просто ViewComposer:$value++ при каждом вызове композиции, но действительно ли это хорошее место для хранения такого значения? Моя единственная проблема с использованием значения stati c в представлении Composer заключается в том, что, если это когда-либо увеличивалось, и я передавал несколько переменных в это представление, семантически целесообразно хранить такие значения stati c в composer?

Помимо всего прочего, является ли это решение лучшим способом достижения того, что я пытаюсь сделать?

1 Ответ

0 голосов
/ 23 апреля 2020

Если значение не должно сохраняться между вызовами, и вам нужно увеличить его, вы можете сделать это следующим образом:

class="my-class-name-{{$variable++}}"
...

Если это число имеет максимум, о котором вы знаете, вы можете передать это другое наберите номер в вашем View Composer и сделайте это следующим образом:

class="my-class-name-{{$variable++ % $modulo}}"
...

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

Я думаю, нам может понадобиться немного больше деталей, чтобы узнать, какое решение будет лучшим.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...