【问题标题】:Laravel check livewire component existenceLaravel 检查 livewire 组件是否存在
【发布时间】:2021-10-26 17:04:54
【问题描述】:

我想在渲染之前检查是否存在 livewire 组件。
我的程序有模块,每个客户端都启用了其中的一些模块。我可以通过$client->getModules() 获取客户拥有的模块列表。
每个模块都可以实现livewire组件来增强程序的功能。如果这些组件存在于程序的正确部分,我想渲染它们。
例如在用户创建视图中,我会这样:

@foreach($client->getModules() as $module)
    if( component_exists( $module . '::users.create' ) )
        @livewire( $module . '::users.create' )
    endif;
@endforeach

如果模块实现了与用户创建相关的功能,它将具有 livewire 组件users.create,但并非所有模块都会增强用户创建。
我需要在渲染之前断言组件的存在。
我想知道是否有类似component_exists( Component::class ) 的东西,否则,我很想看看是否有人可以给我一个提示,告诉我如何将它创建为辅助函数。

【问题讨论】:

    标签: laravel laravel-livewire


    【解决方案1】:

    您可以利用LivewireComponentsFinder 类来检查组件是否在清单中:

    app(LivewireComponentsFinder::class)->getManifest();
    

    如果你想创建一个助手,我创建了laravel-helpers。所以,你可以像这样创建一个助手:

    function component_exists($class)
    {
        $manifest = app(\Livewire\LivewireComponentsFinder::class)->getManifest();
    
        return (bool) array_search($class, $manifest);
    }
    

    【讨论】:

    • 您的答案是正确的,而且效果很好,但我决定使用一个简单的 PHP 函数来进行检查 return class_exists( $modules_path . $module . $livewire_path . $class );
    猜你喜欢
    • 2021-02-13
    • 2019-01-12
    • 2016-09-08
    • 2020-08-03
    • 2014-10-02
    • 2023-02-08
    • 1970-01-01
    • 1970-01-01
    • 2018-02-28
    相关资源
    最近更新 更多