# PHP Attributes
Library use PHP Attributes (opens new window) feature for mapping class into resource object. Lets look on the attributes in more details.
TIP
To use PHP attributes and make our code clear import attributes namespace and give it alias.
use JSONAPI\Resource\Attributes as JSONAPI;
# Resource Object
# Class
To map class to be resource object (opens new window) we must define the identifiers type and id.
Use JSONAPI\Resource\Attributes\Resource PHP attribute, to map class to resource object.
# Type
Type is static, and is same per each object instance of resource class.
# Generated
By default, type will be generated from class name, by making lower case first letter.
#[JSONAPI\Resource()] \\ type === 'article'
class Article
# User defined
We can pass type as first constructor parameter.
#[JSONAPI\Resource('articles')]
class Article
# Id
Each object implementing the resource class going to have different id.
Id can be fetched from object method or property.
idFetcher is second string constructor parameter, and it is getId by default.
It is identifies method or property that must be called to fetch resource id.
Example how to define resource with id identifier represented by id property.
#[JSONAPI\Resource(idFetcher: 'id')
class People {
public string $id
# Attributes
PHP attribute JSONAPI\Resource\Attributes\Attribute is used for setting up resource attributes (opens new window).
Attribute can be assigned on public property, method or class.
TIP
Please do not mix up PHP attributes with JSON:API resource attributes.
# Key
First parameter in attribute constructor is string, and it is resource attribute key. If key not provided or null, it will be the property or method name. For class attribute key is required.
# Value
Attribute value fetcher depends on what attribute target.
# Property target
Class property must be public, so the value can be fetched from the property.
#[JSONAPI\Attribute()]
public string $name
# Method target
Method must be public, so we can fetch value from it.
#[JSONAPI\Attribute()]
public function name(): string
# Class target
Attribute can be assigned on class, in this case key and value must be provided to attribute constructor.
Value can be some static value or anonymous function, that can be called to fetch dynamic value.
#[Attribute(
key: 'name',
value: fn($resource) => $resource->getDynamicName()
)]
class ClassWithDynamicName {
public function getDynamicName(): string
# Relationships
PHP attribute JSONAPI\Resource\Attributes\Relationship is used for mapping resource relationships (opens new window).
Relationship attribute extends same base abstract class as Attribute.
You can reference to Attributes to see how to set up key and value.