angelxmoreno / cakephp-linked-entities
LinkedEntities plugin for CakePHP 3.x
Installs: 3
Dependents: 0
Suggesters: 0
Security: 0
Stars: 1
Watchers: 3
Forks: 0
Open Issues: 0
Type:cakephp-plugin
Requires
- php: >=5.6
- ext-json: ^1
- cakephp/cakephp: ^3.6
Requires (Dev)
- cakephp/cakephp-codesniffer: ^3.0
- codacy/coverage: ^1.4
- codeclimate/php-test-reporter: ^0.4.4
- phpmd/phpmd: ^2.6
- phpunit/phpunit: ^5.4|^6.0
- squizlabs/php_codesniffer: ^3.3
README
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
$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.
The recommended way to install composer packages is:
composer require angelxmoreno/cakephp-linked-entities
Next you need to load the plugin by adding the following to your config/bootstrap.php
file:
// config/bootstrap.php Plugin::load('LinkedEntities', ['bootstrap' => true]);
Finally, create the required tables using cakephp/migrations
:
bin/cake migrations migrate -p LinkedEntities
Or import the sql schema found in config/schema
.
Setup
- In your
config/app.php
define a new config key calledLinkedEntities
( see configuration ) - In your UsersTable add the
LinkedEntities.LinkableEntityUser
behavior like so:
$this->addBehavior('LinkedEntities.LinkableEntityUser');
- Optionally add the
LinkedEntities.LinkableEntity
behavior to the corresponding Table classes defined in your config. i.e:
$this->addBehavior('LinkedEntities.LinkableEntity');
Configuration
Sample configuration:
// 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:
- $this->Users->addStarredProjects($user, $project);
- $this->Users->removeStarredProjects($user, $project);
- $this->Users->addFollowedProjects($user, $project);
- $this->Users->removeFollowedProjects($user, $project);
- $this->Users->addFollowedUsers($user, $otherUser);
- $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.
License
This plugin is offered under an MIT license.