我通过提供程序将数据发送到所有页面。我可以提取数据,但是在发送参数时出现错误。
这是提供商
public function boot()
{
View::share('page',Pages::all()->sortBy('page_must'));
Schema::defaultStringLength(191);
}
在这里,我正在尝试使用提供程序中的数据发送参数。我可以在此处打印名称。但是参数给出了错误。
<ul>
@foreach($page as $service)
<li><a href="{{route('service.Index',$service->page_slug)}}">{{$service->page_title}}</a></li>
@endforeach
</ul>
这是控制器
public function index($slug)
{
$pageList=Pages::all()->sortBy('page_must');
$page=Pages::where('page_slug',$slug)->first();
return view('frontend.service.index',compact('page','pageList'));
}
这是路线
Route::get('/service/{slug}','Frontend\PageController@index')->name('service.Index');
答案 0 :(得分:3)
使用@foreach()
检索单个模型时,无需使用->first()
循环。您可以直接直接访问$page
的值:
// Controller
$page = Pages::where("page_slug", $slug)->first();
// View
<li>
<a href="{{ route('service.Index', $page->page_slug) }}">
{{ $page->page_title }}
</a>
</li>
一个简短的说明,Pages
不是一个好的模型名称。模型是单数,所以应该是Page
。
还要调整此代码:
// View::share('page', Pages::all()->sortBy('page_must'));
View::share('pages', Pages::all()->sortBy('page_must'));
在这段代码中,您正在向所有视图共享一个$page
变量,但是随后您将通过$page
传递一个新的compact('page')
变量,它将覆盖它。
如果您改用变量名pages
,则不会出现此冲突,并且将正确命名它以表示变量包含的内容。 $page
应该是单个Page
,而$pages
应该是Collection
个实例中的Page
个。 变量命名很重要。
啊,还有一件事。如果您调整上面的代码,可以将@foreach()
与$pages
一起使用:
@foreach($pages AS $sPage)
// using `$sPage` to not conflict with `$page` from `compact()`
<li>
<a href="{{ route('service.Index', $sPage->page_slug) }}">
{{ $sPage->page_title }}
</a>
</li>
总而言之,这里的问题是冲突/命名不正确的变量。 View::share('page', ...)
和compact('page')
都在视图中设置了$page
,一个是Collection
,可以与@foreach()
一起使用,另一个是一个{{ 1}}实例,其行为有所不同。