Я извлекаю некоторые переменные для совместного использования со всеми моими представлениями, для этого я использую составители представлений 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
]
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
коллекция
socialLinks это массив. Измените это на это:
{{ $allGlobals->socialLinks['twitter'] }}
allGlobals
а также socialLinks
оба массива, поэтому вы не можете использовать ->
использовать ['key']
вместо:
{{ $allGlobals['socialLinks']['twitter'] }}
Я должен быть:
{{ $allGlobals->socialLinks['twitter'] }}
так как $allGlobals
это объект, но $allGlobals->socialLinks
это массив.
так что если вы попытаетесь получить к нему доступ, как это $allGlobals->socialLinks->twitter
тогда вы получите ошибку
пытаясь получить доступ к свойству не объект