php - 试图获取非对象的属性'page_slug'(查看:)Laravel 6.*
问题描述
我使用 Provider 将数据发送到所有页面。我可以拉数据,但发送参数时出错。
这是提供者
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');
解决方案
@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')
,这将覆盖它。
如果您改为使用变量 name pages
,那么您将不会有这种冲突,并且它将被正确命名以表示变量包含的内容。$page
应该是一个Page
,并且$pages
应该是一个Collection
实例Page
。变量命名很重要。
啊,还有一件事。如果您调整上面的代码,您可以使用@foreach()
with :$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
在视图中设置,一个是 a Collection
,它可以按预期与 一起工作@foreach()
,另一个是单个Page
实例,它的行为不同。
推荐阅读
- php - 如何在 Laravel 中处理多个 GET 请求
- java - 为什么休眠一段时间后会变慢?
- database-design - 适合电子商务的数据库架构
- django - 如何获取表单中的特定字段?
- regex - 如何删除括号内的文字和括号?
- mediawiki-api - MediaWiki:“attachedlocal”和“centralids”是什么意思?
- r - 带有 5 个参数的 Rcpp lapply() 或 mapply()
- angular - 如何在Angular(Jasmine)中为if else语句编写测试用例
- ios - 当我通过在 Swift 中分配策略将 CGFloat 值设置为 AssociatedObject 时为什么会崩溃?
- r - 仅包含在 R 中第 1 和第 3 个四分位数之间的数据的平均值