Skip to content

Set of reusable resource interfaces and traits mapped by Doctrine attributes

License

Notifications You must be signed in to change notification settings

Symandy/MappedResource

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

15 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Symandy Resource Components

This package is a set of reusable components and contains interfaces and traits that could be used in any PHP project using Doctrine mapping (attributes). It was mainly designed to be used for Symfony entities.

This package design was strongly inspired by Sylius Resource Bundle

Installation

$ composer require symandy/mapped-resource

Components

The components are stored in Symandy\Component\Resource\Model namespace.

Each interface have a corresponding trait and contains one or several attributes :

Name (trait + interface) Property Mapped column Methods
Resource $id id getId()
Creatable $createdAt created_at getCreatedAt()
setCreatedAt(?\DateTimeInterface)
create()
Updatable $updatedAt updated_at getUpdatedAt()
setUpdatedAt(?\DateTimeInterface)
update()
Timestampable
(extends Creatable & Updatable)
- - -
Archivable $archivedAt archived_at getArchivedAt()
setArchivedAt(?\DateTimeInterface)
archive()
restore()
Toggleable $enabled enabled isEnabled()
setEnabled(bool)
enable()
disable()
CodeAware $code code getCode()
setCode(?string)
SlugAware $slug slug getSlug()
setSlug(?string)
Versioned $version version getVersion()
setVersion(?int)
Startable $startsAt starts_at getStartsAt()
setStartsAt(?\DateTimeInterface)
Endable $endsAt ends_at getEndsAt()
setEndsAt(?\DateTimeInterface)
PeriodAware
(extends Startable & Endable)
- -

Each trait contains mapping information with attributes. If you are using XML or YAML driver, you have to redefine the mapping for each property (in each entity).

Usage

Resource creation

The best way to use these components is to create a class and an interface for each resource.

It is also possible to create only the class and add the corresponding traits.

Example

<?php

namespace App;

use Symandy\Component\Resource\Model\ResourceInterface;
use Symandy\Component\Resource\Model\TimestampableInterface;
use Symandy\Component\Resource\Model\ToggleableInterface;

interface PostInterface extends ResourceInterface, ToggleableInterface, TimestampableInterface
{
    # Other methods
}
<?php

namespace App;

use Symandy\Component\Resource\Model\ResourceTrait;
use Symandy\Component\Resource\Model\TimestampableTrait;
use Symandy\Component\Resource\Model\ToggleableTrait;

class Post implements PostInterface
{
    use ResourceTrait, ToggleableTrait, TimestampableTrait;

    # Other attributes with getters / setters
}

Use the resource in your app

<?php
use App\Post;

# ...
$post = new Post();

$id = $post->getId();
$post->enable();
$post->create();
# ...