Laravel - 试图在集合上获取非对象的属性
Posted
技术标签:
【中文标题】Laravel - 试图在集合上获取非对象的属性【英文标题】:Laravel - Trying to get property of non-object on Collection 【发布时间】:2017-03-02 09:42:43 【问题描述】:我正在尝试将一些 SEO 值传递给刀片视图。
我的 Blade 视图如下:
@if(!empty($page_data))
<?php $page_data = $page_data[0]; ?>
<title> $page_data->page_seo_title </title>
<meta name="description" content=" $page_data->page_seo_desc ">
<input type="hidden" name="page_id" class="page_id" value=" $page_data->page_id ">
@endif
当我将以下集合传递给视图时,我收到 错误:
试图获取非对象的属性
我的收藏如下:
Collection #286 ▼
#items: array:1 [▼
0 => array:2 [▼
"page_seo_title" => "SEO Title"
"page_seo_desc" => "SEO Desc"
]
]
我正在建立收藏,就像这样:
// Set Page Data
$page_data = collect(
[
[
'page_seo_title' => 'SEO Title',
'page_seo_desc' => 'SEO Desc'
]
]
);
我是否需要在集合中定义其他内容以使其被拾取?
值得指出的是,page_data 适用于运行 Eloquent Query 的页面,所以这不是问题。它只是这些动态页面,我需要设置。所以理想情况下,我不需要更改刀片/视图逻辑。只是集合/控制器逻辑。
【问题讨论】:
$page_data = collect( [ 'page_seo_title' => 'SEO Title', 'page_seo_desc' => 'SEO Desc' ] );或者你需要 $page_data[0]->page_seo_title in Blade 嗨@iCoders 这反过来又返回一个错误:未定义的偏移量:0:/ 然后尝试将集合转换为数组,如 $page_data->toArray();然后打印它检查数据将如何来 使用$page_data['page_seo_title']
而不是$page_data->page_seo_title
那么$page_data
可能首先是一个空集合。您不能在集合对象上使用 empty()
,因为它们总是返回 false。将@if(!empty($page_data))
所在的行改成@if(!$page_data->isEmpty())
,看看是否再次出现错误?
【参考方案1】:
我已根据您的代码及其测试更新了小示例。尝试一次
$page_data = collect(
[
[
'page_seo_title' => 'SEO Title',
'page_seo_desc' => 'SEO Desc'
]
]
);
//here it will print all data
print_r($page_data->toArray());
$data=$page_data->toArray();
// here it will print particular data
echo $data[0]['page_seo_title'];
更新
在你的控制器中
$data=$page_data->toArray();
return view('viewname',['data',$data];
在你的刀片中
@if(!empty($data))
<?php $new_data = $data[0]; ?>
<title> $new_data['page_seo_title'] </title>
<meta name="description" content=" $new_data['page_seo_desc'] ">
<input type="hidden" name="page_id" class="page_id" value=" $new_data['page_id'] ">
【讨论】:
不幸的是,没有进一步的...相同的错误:试图获取非对象的属性 我可以在刀片中尝试一些逻辑 - 检查对象,如果不检查元素? 如果您在控制器中传递$page_data->first()
,则刀片视图中不需要<?php
标签【参考方案2】:
您的集合中没有 page_id 属性,但您可以在刀片视图中访问它。 请检查你的那一行
<input type="hidden" name="page_id" class="page_id" value=" $page_data->page_id ">
您可以访问 page_id,但您的收藏不包含具有 page_id 的属性。
【讨论】:
以上是关于Laravel - 试图在集合上获取非对象的属性的主要内容,如果未能解决你的问题,请参考以下文章