我试图弄清楚如何在Laravel中使用React或Vue。最大的变化是使用json返回所有请求。
因此,我开始查找一些文档并找到有关API Resources的信息
现在我最担心的是,例如在我的应用程序中,我具有以下数据库结构:
因此,客户可以有多个发票,因为他们可以有多个联系人,每个联系人可以有多个电话号码。
现在,我被困的原因是: 您可以拥有所有发票的列表视图,但是我希望在表字段之一中包含公司名称,并且使用同一资源文件在详细信息视图中具有完整的属性列表。
使用资源,我已完成以下操作:
发票集合:
namespace App\Modules\Invoices\Resources;
use Illuminate\Http\Resources\Json\ResourceCollection;
class InvoicesCollection extends ResourceCollection
{
public function toArray($request)
{
return [
'data' => InvoiceResource::collection($this->collection),
'meta' => ['invoice_count' => $this->collection->count()],
];
}
}
发票资源:
<?php
namespace App\Modules\Invoices\Resources;
use App\Modules\Clients\Resources\ClientResource;
use Illuminate\Http\Resources\Json\JsonResource;
class InvoiceResource extends JsonResource
{
public function toArray($request)
{
return [
'id' => $this->id,
'invoice_id' => $this->invoice_id,
'client' => new ClientResource($this->client),
'finalized_at' => $this->finalized_at,
'payed_at' => $this->payed_at
];
}
public function with($request)
{
return [
'data' => [
'client_billing' => $this->client_billing,
'client_shipping' => $this->client_shipping,
'line_items' => $this->lineItems,
'notes' => $this->notes
],
];
}
}
ClientsCollection:
<?php
namespace App\Modules\Clients\Resources;
use Illuminate\Http\Resources\Json\ResourceCollection;
class ClientsCollection extends ResourceCollection
{
public function toArray($request)
{
return [
'data' => ClientResource::collection($this->collection),
'meta' => ['client_count' => $this->collection->count()],
];
}
}
ClientResource:
<?php
namespace App\Modules\Clients\Resources;
use Illuminate\Http\Resources\Json\JsonResource;
class ClientResource extends JsonResource
{
public function toArray($request)
{
return [
'id' => $this->id,
'name' => $this->name,
'vat' => $this->vat,
'contacts' => $this->contacts
];
}
public function with($request)
{
return [
'data' => [
'website' => $this->website,
'phone' => $this->phone,
'email' => $this->email
],
];
}
}
为了明确起见,我正在使用with()函数。哪个状态:
有时您可能只希望包含某些内容 如果资源是最外部的,则具有资源响应的元数据 资源被返回。通常,这包括元信息 关于整个响应。要定义此元数据,请添加 资源类的方法。此方法应返回一个数组 仅在以下情况下将元数据包含在资源响应中: 资源是要渲染的最外面的资源
问题:
这是执行此操作的正确方法吗?当您要排除信息时 列表,并在详细视图上有所有信息?
还有更多控制权吗?如您在我的clientResource中看到的, 有联系人,在导入他们时,他们将拥有所有 信息。如果我添加联系人资源/收藏,那么我有第三个 层,这意味着我将无法使用 在同一“客户端详细信息”页面上的ContactResource with()。