渲染模型时,如何使用 blade 模板而不是默认的 json?
When rendering a model, how to use a blade template instead of json as default?
是否可以将 blade 模板分配给模型?
而不是这样做:
@php $contact = Contact::find(1); @endphp
@include('contact', ['contact' => $contact])
我只想做:
@php $contact = Contact::find(1); @endphp
{{ $contact }}
但后者显然只是吐出了json中的模型。
可以用PHP的__toString()
魔术方法:https://www.php.net/manual/en/language.oop5.magic.php#object.tostring
让我们为默认 User.php
模型做一个例子。
首先,为该模型创建一个 blade 文件,让我们将其创建为 /resources/views/model/user.blade.php
和一个虚拟组件;
<h1>{{ $user->name }}</h1>
<p>{{ $user->created_at->diffForHumans() }}</p>
现在为 User
型号设置此默认值 __toString()
。
将此添加到 app/Models/User.php
;
/**
* @return string
*/
public function __toString(): string
{
return view('model.user', ['user' => $this])->render();
}
现在您可以直接在 routes/web.php
中测试它;
Route::get('test', function () {
echo \App\Models\User::first();
});
或尝试在任何视图中回应它;
{!! $user !!}
您不能使用 {{ $user }}
因为您需要 HTML 标签,所以您必须将其用作 {!! $user !!}
是否可以将 blade 模板分配给模型?
而不是这样做:
@php $contact = Contact::find(1); @endphp
@include('contact', ['contact' => $contact])
我只想做:
@php $contact = Contact::find(1); @endphp
{{ $contact }}
但后者显然只是吐出了json中的模型。
可以用PHP的__toString()
魔术方法:https://www.php.net/manual/en/language.oop5.magic.php#object.tostring
让我们为默认 User.php
模型做一个例子。
首先,为该模型创建一个 blade 文件,让我们将其创建为 /resources/views/model/user.blade.php
和一个虚拟组件;
<h1>{{ $user->name }}</h1>
<p>{{ $user->created_at->diffForHumans() }}</p>
现在为 User
型号设置此默认值 __toString()
。
将此添加到 app/Models/User.php
;
/**
* @return string
*/
public function __toString(): string
{
return view('model.user', ['user' => $this])->render();
}
现在您可以直接在 routes/web.php
中测试它;
Route::get('test', function () {
echo \App\Models\User::first();
});
或尝试在任何视图中回应它;
{!! $user !!}
您不能使用 {{ $user }}
因为您需要 HTML 标签,所以您必须将其用作 {!! $user !!}