من متوجه نمیشم که چجوری توی کلاس ریسورس با استفاده از this$ میتونیم به پراپرتیهای مدل دسترسی داشته باشیم؟
سلام
داخل خود داکیومنت لاراول این مورد رو گفته:
Note that we can access model properties directly from the $this variable. This is because a resource class will automatically proxy property and method access down to the underlying model for convenient access. Once the resource is defined, it may be returned from a route or controller. The resource accepts the underlying model instance via its constructor
میگه که لاراول به طور خودکار از یوزری که به ریسورس پاس میدید پراپرتی ایجاد و داخل کلاس برای دسترسی راحتتر قرار میده.$this هم به کلاس فعلی اشاره میکنه(یعنی همون کلاسی که داخلش هستید)
برای این که ببینید لاراول چطور این مورد رو هندل کرده میتونید کلاس رو بررسی کنید
Illuminate\Http\Resources\Json\JsonResource
کلیتش اینه که اومده در کانستراکتور یک پراپرتی با نام resource ایجاد و یوزر رو درونش قرار داده و با استفاده از مجیک متد __get و __call از پراپرتی اصلی برمیگردونه اطلاعات رو.
__call برای ریلیشنها زده شده و پیشنهاد میکنم سورسش رو حتما بررسی کنید.
namespace Illuminate\Http\Resources\Json;
use ArrayAccess;
use JsonSerializable;
use Illuminate\Contracts\Support\Arrayable;
use Illuminate\Contracts\Routing\UrlRoutable;
class JsonResource implements ArrayAccess, JsonSerializable, Arrayable, UrlRoutable
{
protected $resource;
public function __construct($resource)
{
$this->resource = $resource;
}
public function __get($key)
{
return $this->resource->{$key};
}
public function __call($method, $parameters)
{
return $this->resource->{$method}(...$parameters);
}
public function toArray($request)
{
// This method should be overridden in the resource subclass.
}
}