Я не уверен, является ли это приемлемым или нет, но в некоторых случаях мне нужен какой-то параметр, переданный из контроллера, для использования внутри метода ресурса toArray, и это то, что я сделал.
Создание класса ресурсов, расширяющего Illuminate\Http\Resources\Json\ResourceCollection
.
<?php
namespace App\Http\Resources;
use Illuminate\Http\Resources\Json\ResourceCollection;
class TestResource extends ResourceCollection
{
private $id;
public function __construct($id, $collection)
{
parent::__construct($collection);
$this->id = $id;
}
public function toArray($request)
{
return [
'data' => $this->collection,
'id' => $this->id
];
}
}
И с контроллера вы можете позвонить так:
<?php
namespace App\Http\Controllers;
use App\Http\Resources\TestResource;
use Illuminate\Http\Request;
use Illuminate\Http\Resources\Json\ResourceCollection;
class TestController extends Controller
{
public function index()
{
$id = 30;
$collection = collect([['name' => 'Norli'], ['name' => 'Hazmey']]);
return new TestResource($id, $collection);
}
}