https://github.com/angelxmoreno/cakephp-linked-entities
A CakePHP 3.x Plugin for associating a User Entity to any Entity via a polymorphic model
https://github.com/angelxmoreno/cakephp-linked-entities
cakephp-plugin cakephp3 php polymorphism
Last synced: 5 months ago
JSON representation
A CakePHP 3.x Plugin for associating a User Entity to any Entity via a polymorphic model
- Host: GitHub
- URL: https://github.com/angelxmoreno/cakephp-linked-entities
- Owner: angelxmoreno
- Created: 2018-08-28T03:49:51.000Z (over 7 years ago)
- Default Branch: master
- Last Pushed: 2018-09-04T11:10:20.000Z (over 7 years ago)
- Last Synced: 2024-11-10T10:51:48.405Z (over 1 year ago)
- Topics: cakephp-plugin, cakephp3, php, polymorphism
- Language: PHP
- Size: 45.9 KB
- Stars: 1
- Watchers: 3
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# LinkedEntities plugin for CakePHP 3.x
[](https://travis-ci.com/angelxmoreno/cakephp-linked-entities)
[](https://www.codacy.com/app/angelxmoreno/cakephp-linked-entities?utm_source=github.com&utm_medium=referral&utm_content=angelxmoreno/cakephp-linked-entities&utm_campaign=Badge_Grade)
[](https://codeclimate.com/github/angelxmoreno/cakephp-linked-entities/maintainability)
[](https://codeclimate.com/github/angelxmoreno/cakephp-linked-entities/test_coverage)
[](LICENSE.txt)
[](https://cakephp.com/)
[](https://php.net/)
LinkedEntities allows the ability to associate your User Entities with any other Entities ( including self referencing )
by a category type. It adds shortcut functions to your User Table for ease of use.
## Features
- Ability to define User-to-Entity relationship via a polymorphic table
- Define relationship by category
- Automatic relationship of Entity-to-User
- Shortcut methods based on relationship name
## Examples
```php
$this->Users->addStarredProject($user, $project);
$this->Users->removeFollowedUser($user, $otherUser);
```
## Requirements
- CakePHP 3.x
- PHP >=5.6
## Installation
You can install this plugin into your CakePHP application using [composer](http://getcomposer.org).
The recommended way to install composer packages is:
```sh
composer require angelxmoreno/cakephp-linked-entities
```
Next you need to [load the plugin](http://book.cakephp.org/3.0/en/plugins.html#loading-a-plugin) by adding the following to your `config/bootstrap.php` file:
```php
// config/bootstrap.php
Plugin::load('LinkedEntities', ['bootstrap' => true]);
```
Finally, create the required tables using `cakephp/migrations`:
```bash
bin/cake migrations migrate -p LinkedEntities
```
Or import the sql schema found in `config/schema`.
## Setup
1. In your `config/app.php` define a new config key called `LinkedEntities` ( see [configuration](#configuration) )
2. In your UsersTable add the `LinkedEntities.LinkableEntityUser` behavior like so:
```php
$this->addBehavior('LinkedEntities.LinkableEntityUser');
```
3. Optionally add the `LinkedEntities.LinkableEntity` behavior to the corresponding Table classes defined in your config. i.e:
```php
$this->addBehavior('LinkedEntities.LinkableEntity');
```
## Configuration
Sample configuration:
```php
// config/app.php
'LinkedEntities' => [
'UserModel' => 'Users',
'link_types' => [
'star' => 1,
'follow' => 2,
],
'links' => [
'StarredProjects' => [
'name' => 'UserStars',
'className' => 'Projects',
'linkType' => 1
],
'FollowedProjects' => [
'name' => 'Followers',
'className' => 'Projects',
'linkType' => 2
],
'FollowedUsers' => [
'name' => 'Followers',
'className' => 'Users',
'linkType' => 2
]
]
]
```
With the configuration above ( after adding the behavior ) you will have 6 new methods available to your UsersTable:
1. $this->Users->addStarredProjects($user, $project);
2. $this->Users->removeStarredProjects($user, $project);
3. $this->Users->addFollowedProjects($user, $project);
4. $this->Users->removeFollowedProjects($user, $project);
5. $this->Users->addFollowedUsers($user, $otherUser);
6. $this->Users->removeFollowedUsers($user, otherUser);
#### UserModel parameter
A string defining the plugin.name of your UsersTable ( defaults to `Users` )
#### link_types
An array as a int => string ( this saves the int provided under the table column `type` )
#### links
An array as relationship name => settings
Settings have the following keys
- name: The name of the relationship from the perspective of the linked entity ( the reverse relationship name )
- className: The name of the table to associate the user to
- linkType: the int value corresponding to one of the defined `link_types`
## Reporting Issues
If you have a problem with the plugin please open an issue on [GitHub](https://github.com/angelxmoreno/cakephp-linked-entities/issues).
## License
This plugin is offered under an [MIT license](https://opensource.org/licenses/mit-license.php).