Проблема с кэшированием в пользовательской директиве о блейдах - Laravel - PullRequest
0 голосов
/ 21 февраля 2020

Я создал пользовательскую директиву лезвия @admin ... @endadmin в AppServiceProvider. Но эта директива кэшируется. Вот почему я должен запускать команду php artisan view:clear каждый раз после нового входа в систему. Каков наилучший способ использовать пользовательскую директиву blade-сервера без ущерба для производительности?

Вот метод логики c in boot AppServiceProvider

Blade::directive('admin', function () {
    $isAuth = 'false';
    if (Auth::user() && Auth::user()->role_id == 3) {   
        $isAuth = 'true';
    }
    return "<?php if ($isAuth): ?>";
});
Blade::directive('endadmin', function () {
    return "<?php endif; ?>";
});

1 Ответ

2 голосов
/ 21 февраля 2020

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

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

Вы можете узнать, как выглядит визуализированный вид, проверив папку storage/framework/views. Он содержит все скомпилированные представления.

В вашем случае вам придется вернуть что-то подобное из вашей директивы:

return '<?php if (auth()->user() && auth()->user()->role_id == 3): ?>';
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...