Laravel: пытается получить свойство '' необъекта - PullRequest
0 голосов
/ 07 ноября 2018

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

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

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

После этого:

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

My 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 голосов
/ 07 ноября 2018

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

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

OR

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

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

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

0 голосов
/ 07 ноября 2018

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

{{ $allGlobals['socialLinks']['twitter'] }}
0 голосов
/ 07 ноября 2018

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

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

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

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

0 голосов
/ 07 ноября 2018

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

{{ $allGlobals->socialLinks['twitter'] }}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...