This package is a set of reusable components and contains interfaces and traits that could be used in any PHP project. It was mainly designed to be used for Symfony entities.
This package design was strongly inspired by Sylius Resource Bundle
$ composer require symandy/resource
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 | Methods |
---|---|---|
Resource | $id | getId() |
Creatable | $createdAt | getCreatedAt() setCreatedAt(?\DateTimeInterface) create() |
Updatable | $updatedAt | getUpdatedAt() setUpdatedAt(?\DateTimeInterface) update() |
Timestampable (extends Creatable & Updatable) |
- | - |
Archivable | $archivedAt | getArchivedAt() setArchivedAt(?\DateTimeInterface) archive() restore() |
Toggleable | $enabled | isEnabled() setEnabled(bool) enable() disable() |
CodeAware | $code | getCode() setCode(?string) |
SlugAware | $slug | getSlug() setSlug(?string) |
Versioned | $version | getVersion() setVersion(?int) |
Startable | $startsAt | getStartsAt() setStartsAt(?\DateTimeInterface) |
Endable | $endsAt | getEndsAt() setEndsAt(?\DateTimeInterface) |
PeriodAware (extends Startable & Endable) |
- | - |
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.
<?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
}
<?php
use App\Post;
# ...
$post = new Post();
$id = $post->getId();
$post->enable();
$post->create();
# ...