尝试读取数组上的属性“标题”(错误异常)Laravel Php

Posted

技术标签:

【中文标题】尝试读取数组上的属性“标题”(错误异常)Laravel Php【英文标题】:Attempt to read property "title" on array (Error Exception) Laravel Php 【发布时间】:2021-09-14 07:47:00 【问题描述】:

当我尝试运行以下命令时,它会出现无法读取数组标题的错误异常。你能告诉我如何解决这个问题吗?

**我来自 app/models 的邮政编码如下**

 <?php


namespace App\Models;

use Illuminate\Database\Eloquent\ModelNotFoundException; //
use Illuminate\Support\Facades\File;

class Post
   
    public $title;

    public $excerpt;

    public $date;
    
    public $body;

    public function __construct($title, $excerpt, $date, $body)
    
        $this-> title = $title;              //this is where the error is occurring 
        $this-> excerpt = $excerpt;
        $this-> date = $date;
        $this-> body = $body;
    

    public static function all() 
    
        $files = File::files(resource_path("postss/"));

      return  array_map(function ($file)
            return $file-> getContents();
        , $files);
        
    
    

    public static function find($slug)
    
        
        base_path();

         if (!file_exists($path = resource_path("postss/$slug.html"))) 
            throw new ModelNotFoundException();
        
    
        return cache()-> remember("posts.$slug", 7 , function () use ($path)
           
         return file_get_contents($path);
    
        );
    
    
        
      
       

    



我的路线类代码是

Route::get('/', function () 
  
    $files = File::files(resource_path("postss"));
    $posts =[];

    foreach ($files as $file) 
       $document[] = YamlFrontMatter::parseFile($file);
       $posts[]= new Post(
           $document->title,
           $document->excerpt,
           $document->date,
           $document->body()
       );
    
);

据我所知,代码是正确的,我只是不知道是否需要添加一些东西或做些什么来使错误消失。

【问题讨论】:

你也可以发布堆栈跟踪吗? 【参考方案1】:

错误在这个 foreach 循环中

foreach ($files as $file) 
   $document[] = YamlFrontMatter::parseFile($file);
   $posts[]= new Post(
       $document->title,
       $document->excerpt,
       $document->date,
       $document->body()
   );

特别是这里

$document[] = YamlFrontMatter::parseFile($file);

您将新对象添加到数组 $document 中并在此处

$document->title,

你尝试直接从 $document 访问标题,你需要指定数组的索引来访问具有属性的对象,像这样

$document[0]->title,

或者你可以将第一部分改写成

$document = YamlFrontMatter::parseFile($file);

【讨论】:

谢谢你,卢卡斯。我明白了,它现在可以工作了。【参考方案2】:

我认为错误确实在这里

foreach ($files as $file) 
    // you load an array here !!!
    $document[] = YamlFrontMatter::parseFile($file);
    $posts[]= new Post(
       $document->title,        // then you use $document as a scalar?
       $document->excerpt,
       $document->date,
       $document->body()
   );

我认为你可能需要这样做

foreach ($files as $file) 
   // you load an array here !!!
   $document = YamlFrontMatter::parseFile($file);
   $posts[]= new Post(
          $document->title,        
          $document->excerpt,
          $document->date,
          $document->body()
       );

【讨论】:

以上是关于尝试读取数组上的属性“标题”(错误异常)Laravel Php的主要内容,如果未能解决你的问题,请参考以下文章

异常错误:访问冲突读取位置 0xDDDDDDDD

Dataproc 上的 Jupyterlab - 403 错误 - 无法读取未定义的属性“路径”

FluentNHibernate 异常:复合用户类型上的“属性映射的列数错误”

尝试在 Laravel 8 中读取 null 上的属性“名称”

无法读取未定义类型错误的属性“推送”:无法读取未定义错误的属性“推送”

遍历对象数组-TypeError:无法读取未定义的属性“名称”