【问题标题】:Is it possible to create Blade directives which behave differently for different users?是否可以创建对不同用户表现不同的 Blade 指令?
【发布时间】:2019-09-14 19:03:49
【问题描述】:

我想使用像

这样的 Blade 指令
@admin
  // template for admin
  @include('layouts.admin')
@endadmin

@notadmin
  // template for usual user
  @include('layouts.meremortal')
@endnotadmin

并在AppServiceProvider.phpboot()方法中注册这些指令。

但是在注销管理员并像往常一样登录后,我继续看到模板的管理部分(并且看不到不是管理部分)。

切换到后

@if (Auth::user()->is_admin)

    @include('layouts.admin')

@else 

    @include('layouts.meremortal')

@endif

一切似乎都很好。

所以问题是:通常是否可以使 Blade 指令动态化,或者它们只转换为纯 PHP 一次并且在运行时不改变?如果有可能,那我做错了什么?

提前致谢!

【问题讨论】:

    标签: php laravel laravel-blade


    【解决方案1】:

    您可以在AppServiceProvider.php 文件的引导函数中制作自定义指令。

    <?php
    
    namespace App\Providers;
    
    use Illuminate\Support\Facades\Blade;
    use Illuminate\Support\ServiceProvider;
    
    class AppServiceProvider extends ServiceProvider
    {
        /**
         * Perform post-registration booting of services.
         *
         * @return void
         */
        public function boot()
        {
            Blade::directive('hello', function ($expression) {
                return "<?php echo 'Hello ' . {$expression}; ?>";
            });
        }
    
        /**
         * Register bindings in the container.
         *
         * @return void
         */
        public function register()
        {
            //
        }
    }
    

    更多详情可以访问this参考。

    【讨论】:

    • 嗯,是的,这正是我在我的问题中所写的。但问题是为什么指令在运行时不会改变状态,我切换用户但获得相同的功能。我在问问题之前考虑了你提供的链接,从那里使用了代码 sn-ps)
    猜你喜欢
    • 1970-01-01
    • 2022-10-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多