Laravel 7 - 没有视图的组件

Laravel 7 - Component without view

我想创建一个只提供数据而没有视图的组件。

例如:

<x:wg.items.listing :items="$items->items()" :filter="$obj->settings['filter']">
    @foreach($items as $item)
        {{ $item->title }}
    @endforeach     
</x:wg.items.listing>

Blade 组件获得 :items:filter 的集合。 标签之间应该有一个可用的过滤集合。

Listing.php:

class Listing extends Component
{

    public $items;
    public $filter;

    /**
     * Create a new component instance.
     *
     * @return void
     */
    public function __construct($filter="0", $items="0")
    {
        $this->filter = $filter;
        $this->items = $items;
    }

    /**
     * Get the view / contents that represent the component.
     *
     * @return \Illuminate\View\View|string
     */
    public function render()
    {
        $this->items = app()->make("App\Http\Controllers\Frontend\BlogController")->generateList($this->items, $this->filter);

        /*return view('components.wg.items.list');*/

    }
}

Listing.php 不应呈现视图,因为项目集合仅在 components.wg.items.list 中可用,而不在上面的 Blade x 标签之间可用。

这可能吗? 提前致谢!

你不能做这样的事;您在组件中声明的每个变量仅在组件本身中可用。

...除非您想以 真正 肮脏的方式来做。然后就可以使用全局变量了:

<x:wg.items.listing :items="$items->items()" :filter="$obj->settings['filter']">
    @php
        global $filtered_items;
    @endphp
    @foreach($filtered_items as $item)
        {{ $item->title }}
    @endforeach     
</x:wg.items.listing>
    public function render()
    {
        global $filtered_items;
        $filtered_items = app()->make("App\Http\Controllers\Frontend\BlogController")->generateList($this->items, $this->filter);

        return "{{ $slot }}";

    }

P.S:顺便说一句,你不应该把你的过滤逻辑放在你的控制器中。模型应该对此负责。