为了账号安全,请及时绑定邮箱和手机立即绑定

Laravel 7 - 没有视图的组件

Laravel 7 - 没有视图的组件

PHP
ibeautiful 2023-03-04 10:53:35
我想创建一个只提供数据而没有视图的组件。例如:<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. 标签之间应该有一个可用的过滤集合。清单.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应该呈现视图,因为项目集合仅在上面的 Blade x 标签中可用components.wg.items.list,而不在它们之间可用。这可能吗?先感谢您!
查看完整描述

1 回答

?
达令说

TA贡献1821条经验 获得超6个赞

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


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


<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 }}";


    }

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


查看完整回答
反对 回复 2023-03-04
  • 1 回答
  • 0 关注
  • 69 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信