【发布时间】:2024-04-14 09:20:01
【问题描述】:
我有一个大型导航需要从我的数据库中提取数据。
我将导航分成 3 个组件,这样更易于使用。
<x-navigation.navigation/>
|
|
<x-navigation.desktop.nav-desktop/> (Needs DB Query activeCountries & activeSponsorCountries)
|
|
<x-navigation.mobile.nav-mobile/> (Needs DB Query activeCountries & activeSponsorCountries)
我将 Both Query 添加到 View Composer,因为导航需要始终访问这些。
这是 View Composer 的逻辑: (我可以在任何地方使用它们,但出于某种原因在组件中使用它们......?)
ViewComposer > ActiveCountriesComposer.php
class ActiveCountriesComposer {
public $activeCountries = [];
public function compose(View $view) {
$this->activeCountries = Country::where('active', 1)->get(['id',...]);
$view->with('activeCountries', $this->activeCountries);
}
}
ViewComposer > ActiveSponsorCountriesComposer.php
class ActiveSponsorCountriesComposer {
public $activeSponsorCountries = [];
public function compose(View $view) {
$this->activeSponsorCountries = Country::where('active', 1)
->whereHas('locations', function (Builder $query) {
$query->where('sponsorship_country', '=', 1);
})
->get(['id',...]);
$view->with('activeSponsorCountries', $this->activeSponsorCountries);
}
}
我需要知道如何访问内部的 2 个 View Composer 查询
<x-navigation.desktop.nav-desktop/>&<x-navigation.mobile.nav-mobile/>
目前我可以使用它,但不能使用 View Composer...我必须在 View Components 中发出重复请求。
组件 NavDesktop 和 NavMobile 都使用重复代码: (NavMobile 完全相同)
class NavDesktop extends Component
{
public $activeCountries;
public $activeSponsorCountries;
public function __construct()
{
$this->activeCountries = Country::where('active', 1)->get(['id',...]);
$this->activeSponsorCountries = Country::where('active', 1)
->whereHas('locations', function (Builder $query) {
$query->where('sponsorship_country', '=', 1);
})
->get(['id',...]);
}
public function render()
{
return view('components.navigation.desktop.nav-desktop')->with('activeCountries','activeSponsorCountries');
}
有没有办法可以将 View Composer 查询传递给根 级别组件
<x-navigation.navigation/>所以它将允许 2 个组件<x-navigation.desktop.nav-desktop/>&<x-navigation.mobile.nav-mobile/>使用 View Composer 中的这两个查询?
任何帮助将不胜感激。
- 使用 Laravel 7+
【问题讨论】:
-
您将两个视图作曲家附加到哪些视图?
-
@Remul 我没有将它们附加到任何东西上。它们只是全球性的,我可以通过执行
@foreach($activeCountries as $ac) ...之类的操作访问站点中的任何位置
标签: laravel eloquent components laravel-7