我正在检索要与所有视图共享的一些变量,为此,我正在使用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
]
答案 0 :(得分:3)
socialLinks 是一个数组。更改为此:
{{ $allGlobals->socialLinks['twitter'] }}
答案 1 :(得分:0)
allGlobals
和socialLinks
都是数组,因此您不能使用->
,而应使用['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
馆藏内保持不变