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-&gt;page_seo_title 那么$page_data 可能首先是一个空集合。您不能在集合对象上使用 empty(),因为它们总是返回 false。将@if(!empty($page_data))所在的行改成@if(!$page_data-&gt;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-&gt;first(),则刀片视图中不需要&lt;?php 标签【参考方案2】:

您的集合中没有 page_id 属性,但您可以在刀片视图中访问它。 请检查你的那一行

<input type="hidden" name="page_id" class="page_id" value=" $page_data->page_id ">

您可以访问 page_id,但您的收藏不包含具有 page_id 的属性。

【讨论】:

以上是关于Laravel - 试图在集合上获取非对象的属性的主要内容,如果未能解决你的问题,请参考以下文章

试图在 laravel 5.4 上获取非对象错误的属性

试图在 laravel 5.5 中获取非对象的属性

试图在 Laravel 4 中获取非对象的属性

laravel 试图获取非对象的属性

试图获取非对象的属性 [laravel 5.2]

试图在laravel中获取非对象的属性'expiry_date'