Laravel:试图获取非对象的属性“”

时间:2018-11-07 12:08:31

标签: php laravel

我正在检索要与所有视图共享的一些变量,为此,我正在使用laravel的视图作曲器。

但是,当尝试访问刀片模板中的值时,出现以下错误:

“试图获取非对象的属性'socialLinks'(查看:C:\ xampp \ htdocs \ Costadog4 \ resources \ views \ inicio \ index.blade.php)”

这样做之后:

{{ $allGlobals->socialLinks->twitter }}

我的GlobalsComposer:

<?php

namespace App\Http\ViewComposers;

use Illuminate\View\View;
use App\Models\Globals;
use App\Models\Post;
use Auth;
use Config;

class GlobalsComposer
{


    public function __construct()
    {
        // Dependencies automatically resolved by service container...
    }


    public function compose(View $view)
    {

        $globals = Globals::all()->pluck('value', 'name'); 

        $socialLinks = [

            'twitter' => config('globals.twitter'),
            'facebook' => config('globals.facebook'),
            'instagram' => config('globals.instagram'),

        ];

        $layoutLinks = [

            'classPosts' => Post::withCategory('Clases')->take(10)->get(),
            'behaviourPosts' => Post::withCategory('Conducta canina')->take(10)->get(),
            'trainingPosts' => Post::withCategory('Formación')->take(10)->get(),

        ];

        $loggedUser = Auth::user();

        $allGlobals = compact('globals', 'socialLinks', 'layoutLinks', 'loggedUser');
        //dd($allGlobals);

        $view->with('allGlobals', $allGlobals);
    }
}

这是$ allGlobals的形状:

array:4 [▼
  "globals" => Collection {#1036 ▶}
  "socialLinks" => array:3 [▶]
  "layoutLinks" => array:3 [▶]
  "loggedUser" => null
]

4 个答案:

答案 0 :(得分:3)

socialLinks 是一个数组。更改为此:

{{ $allGlobals->socialLinks['twitter'] }}

答案 1 :(得分:0)

allGlobalssocialLinks都是数组,因此您不能使用->,而应使用['key']

{{ $allGlobals['socialLinks']['twitter'] }}

答案 2 :(得分:0)

我应该是:

{{ $allGlobals->socialLinks['twitter'] }}

因为$allGlobals是一个对象,但是$allGlobals->socialLinks是一个数组。 因此,如果您尝试像这样$allGlobals->socialLinks->twitter进行访问,则会收到错误消息

  

尝试访问非对象属性

答案 3 :(得分:0)

socialLinks是一个数组,您可以将其用作:

{{ $allGlobals->socialLinks['twitter'] }}

OR

    $socialLinks = [

        'twitter' => config('globals.twitter'),
        'facebook' => config('globals.facebook'),
        'instagram' => config('globals.instagram'),

    ];

    $socialLinks = collect($socialLinks); // Convert array to collection

现在这应该可行:

{{ $allGlobals->socialLinks->twitter }}

提示: 使用链式方法时,请使用optional()方法

{{ optional($allGlobals->socialLinks)->twitter }}

这消除了错误“试图获取非对象的属性”并在缺少socailLinks的情况下返回NULL

OR

如果使用php 7

{{ $allGlobals->socialLinks->twitter ?? "www.defaulturl.com" }}

建议转换为馆藏,因为您的数据将在$allGlobals馆藏内保持不变