我通过$user-〉profile-〉profile_pic向组件的视图传递数据,当我在该视图中使用dd时,它完美地显示了所需的值。但当我在某些条件下或在标记中使用它来打印该值时,它说尝试读取属性"profile_pic" on null。尽管如此,这并不是因为我可以删除并转储它,并且可以看到该值
组件的用途:
<x-details
:user="$user->id"
class="w-96 mt-10 py-4"
letter="{{ $user->username[0] }}"
editable="{{ Auth::user()->username == $user->username }}"
profile_pic="{{ $user->profile->profile_pic }}"
/>
该组件
<?php
namespace App\View\Components;
use Illuminate\View\Component;
use App\Models\User;
use Illuminate\Support\Facades\DB;
class details extends Component
{
/**
* Create a new component instance.
*
* @return void
*/
public $user;
public function __construct($user = 1)
{
$this->user = $user;
}
/**
* Get the view / contents that represent the component.
*
* @return \Illuminate\Contracts\View\View|\Closure|string
*/
public function render()
{
$user = User::with(['profile'])->firstWhere("id", $this->user);
$pic = $user->profile->profile_pic;
return view('components.details', compact("pic"));
}
}
组件的视图
<div>
@props([
"letter" => "A",
"editable" => 0,
"profile_pic" => 0
])
{{-- @php
$src = "";
if($profile_pic) {
$src = "/uploads/$profile_pic";
} else {
$src = url("fonts/icons/avatars/$letter.svg");
}
@endphp --}}
<div>
{{-- @dd($pic) --}}
{{ $pic }}
{{-- @if(!$editable)
<a href="#" {{ $attributes->merge(["class" => "avatar"]) }}><img class="rounded-full avatar" src="{{ $src }}" alt="avatar"></a>
@else
<form id="fileUpload">
<a href="#" onclick="document.getElementById('upload_pic').click()" {{ $attributes->merge(["class" => "avatar"]) }} ><img id="output" style="width: 144px;" class="rounded-full avatar" src="{{ $src }}" alt="avatar"></a>
<input class="hidden" type="file" name="upload_pic" id="upload_pic">
</form>
@endif --}}
</div>
</div>
2条答案
按热度按时间tcomlyy61#
这是一个常见的问题,当你试图在foreach中dd()一些东西时,它总是只转储第一项并死亡,所以你总是确认第一项并认为它工作得和预期的一样好。
在您的情况下,可能有一些用户没有profile_pic或profile没有任何profile_pic相关。
尝试使用下面的代码在组件中调试它。
rt4zxlrg2#
在组件内部,应该使用
$this
:所以与其说
你应该做的