Skip to content

Defining Resource Configurations ​

Resource configurations extend Jengo\Api\Support\ResourceConfig to define endpoint behavior, relationship permissions, and validation bindings.

Example ​

php
namespace App\Api;

use Jengo\Api\Support\ResourceConfig;
use Jengo\Api\Support\HookContext;
use App\Forms\CreateUserForm;
use App\Forms\UpdateUserForm;

class UserResourceConfig extends ResourceConfig
{
    /**
     * Target API version constraint
     */
    protected $version = 'v1';

    /**
     * Allowed relationships to derive via ?derive=
     */
    protected array $allowedRelations = ['profile', 'posts'];

    /**
     * Fields whose IDs should be obfuscated with Sqids
     */
    protected array $obfuscatedFields = ['id'];

    /**
     * Maximum pagination limit allowed for this resource
     */
    protected int $maxLimit = 100;

    /**
     * HTTP verbs requiring authentication
     */
    protected array $requiredAuth = ['post', 'put', 'patch', 'delete'];

    /**
     * Validation FormHandler classes mapped to HTTP verbs
     */
    protected $formClass = [
        'post' => CreateUserForm::class,
        'put'  => UpdateUserForm::class,
    ];

    /**
     * Resource URL identifier (e.g. /api/v1/users)
     */
    public function name(): string
    {
        return 'users';
    }

    /**
     * Modify data before saving
     */
    public function beforeSave(array $data, ?HookContext $context = null): array
    {
        if (isset($data['password'])) {
            $data['password'] = password_hash($data['password'], PASSWORD_DEFAULT);
        }

        return $data;
    }
}

NOTE

To use database key obfuscation, your database Entity class must extend Jengo\Base\Entities\BaseEntity and declare the targeted fields in its $obfuscatedFields property.

Released under the MIT License.