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:顺便说一句,你不应该把你的过滤逻辑放在你的控制器中。模型应该对此负责。
我想创建一个只提供数据而没有视图的组件。
例如:
<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:顺便说一句,你不应该把你的过滤逻辑放在你的控制器中。模型应该对此负责。