Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/maymeow/cakephp-api-resource
☔JSON API resource for CakePHP :birthday: Inspired by Laravel's API resources
https://github.com/maymeow/cakephp-api-resource
cakephp-plugin cakephp3 resources restful-api
Last synced: 16 days ago
JSON representation
☔JSON API resource for CakePHP :birthday: Inspired by Laravel's API resources
- Host: GitHub
- URL: https://github.com/maymeow/cakephp-api-resource
- Owner: MayMeow
- Created: 2018-05-06T07:39:03.000Z (over 6 years ago)
- Default Branch: master
- Last Pushed: 2023-07-16T21:27:20.000Z (over 1 year ago)
- Last Synced: 2024-11-18T09:49:29.012Z (about 1 month ago)
- Topics: cakephp-plugin, cakephp3, resources, restful-api
- Language: PHP
- Homepage:
- Size: 28.3 KB
- Stars: 0
- Watchers: 3
- Forks: 0
- Open Issues: 2
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG
Awesome Lists containing this project
README
# Cakephp Api Resource
[![Beerpay](https://beerpay.io/MayMeow/cakephp-api-resource/badge.svg)](https://beerpay.io/MayMeow/cakephp-api-resource)
[![Build Status](https://travis-ci.org/MayMeow/cakephp-api-resource.svg?branch=master)](https://travis-ci.org/MayMeow/cakephp-api-resource)JSON API Resource plugin for CakePHP. This plugin is inspired with laravel's JSON API resources.
## Requirements
* CakePHP 3.6
* PHP 7.1 or greater## Installation
Cakephp Api Resource plugin can be installed with Composer
```bash
composer require maymeow/cakephp-api-resource
```## Usage
### Creating resources
In this example ill show how to create UserResource. In your application create new file `src/Http/Resources/UserResource.php`.
**UserResource.php** will looks like this:
```php
$this->id,
'email' => $this->email,
'created_at' => $this->created
];
}
}
```Next you can use your newly created resource in your api controller. Example below:
```php
Users->find();$users = UserResource::collection($query);
$this->set([
'users' => $users,
'_serialize' => ['users']
]);
}
```### Single vs collection of resources
If you getting one instance of entity for example `$this->Users->get($id)` use:
```php
// BelongsTo, HasOne
$user = (new UserResource($userQuery))->get();
```If you getting more instances for example index `$allUsers = $this->Users->find()` use:
```php
// HasMany, HasAndBelongsToMany
$users = UserResource::collection($query);
```### Anonymous functions
In cas you will need update properties before send them to client resources support anonymous functions. Following example show how to send html generated from
markdown:in your resource file
```php
public function toArray()
{
return [
'id' => $this->id,
'raw_body' => $this->text,
'html_body' => function ($q) {
return (new Parsedown())->$text($q->text); // text is parsed before data is send to client
}
];
}
```### Associations beta
Resources can include each other.
```php
public function toArray()
{
return [
'id' => $this->id,
'name' => $this->name,
'profile' => function ($q) {
return (new ProfileResource($q->profile))->get(); // single entity (belongsTo, HasOne)
},
'posts' => function ($q) {
return PostResource::collection($q->posts); // collection of resources (hasMany)
}
];
}
```Known bug: In beta **do not** include same association because in cause neverending loop.
## Contributing
1. Fork it!
2. Create your feature branch: `git checkout -b my-new-feature`
3. Commit your changes: `git commit -am 'Add some feature'`
4. Push to the branch: `git push origin my-new-feature`
5. Submit a pull request :D## History
SEE changelog
## Credits
* MayMeow
## License
MIT