Laravel, используя переменную из базы данных в пользовательской директиве blade - PullRequest
0 голосов
/ 19 января 2019

Сводка

Пользовательская директива блейда не использует текущее значение в базе данных без предварительной очистки кеша представления.Так как это значение может быть изменено пользователем и влияет на представление, мне нужна директива, чтобы всегда извлекать текущее значение из БД, а не использовать кэшированное (это работает для таких директив, как @auth, так почему бы не мой собственный?).

Справочная информация

Я написал пользовательскую директиву, используя этот учебник , в сущности одно и то же показывает различное содержимое в зависимости от значения, хранящегося в базе данных.Проблема, с которой я сталкиваюсь, заключается в том, что если переменная изменяется, например, с false на true, директива остается со старым значением, она не обновляет его при изменении в БД.Он работает, когда я очищаю кеш представления, но я хочу, чтобы он всегда использовал текущее значение, хранящееся в базе данных.

Код

\Blade::directive('signup_done', function () {
    $condition = false;

    if (\Auth::check()) {
        if (\Auth::user()->signup_done) $condition = true;
    }

    return "<?php if ($condition) { ?>";
});

Ожидаемые и фактические результаты

signup_done по умолчанию false для каждого пользователя, если оно меняется на true Я хочу, чтобы директива выводила true, но она застряла в false, пока я не очистил кэш представления.

1 Ответ

0 голосов
/ 19 января 2019

Blade кэширует строку возврата вашей пользовательской директивы, но если эта строка является кодом PHP, она будет оценена при доступе к кэшированному представлению. Что вы можете сделать, это включить всю условную логику в возвращаемую строку, например:

\Blade::directive('signup_done', function () {
    return "<?php if (\Auth::check() && \Auth::user()->signup_done) { ?>";
});

Возможно, это не лучшее решение, но оно должно работать.

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