Laravel: пытается получить свойство » необъекта

Я извлекаю некоторые переменные для совместного использования со всеми моими представлениями, для этого я использую составители представлений laravel.

Однако при попытке получить доступ к значениям в моих шаблонах блейдов я получаю следующую ошибку:

«Попытка получить свойство ‘socialLinks’ необъекта (представление: C: \ xampp \ htdocs \ Costadog4 \ resources \ views \ inicio \ index.blade.php)»

После этого:

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

Мой глобальный композитор:

<?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
]

0

Решение

socialLinks это массив, который вы можете использовать как:

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

ИЛИ ЖЕ

    $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 }}

Это устраняет ошибку «Попытка получить свойство не-объекта» и возвращает NULL если socailLinks отсутствует

ИЛИ ЖЕ

при использовании php 7

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

Преобразование в коллекцию рекомендуется, так как ваши данные будут постоянными внутри $allGlobals коллекция

0

Другие решения

socialLinks это массив. Измените это на это:

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

allGlobals а также socialLinks оба массива, поэтому вы не можете использовать ->использовать ['key'] вместо:

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

Я должен быть:

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

так как $allGlobals это объект, но $allGlobals->socialLinks это массив.
так что если вы попытаетесь получить к нему доступ, как это $allGlobals->socialLinks->twitter тогда вы получите ошибку

пытаясь получить доступ к свойству не объект

0
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector