Skip to content

Latest commit

 

History

History

.docs

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 

Contributte Doctrine Extensions KnpLabs

Content

Doctrine (KnpLabs/DoctrineBehaviors) extension for Nette Framework

Setup

Install package

composer require nettrine/extensions-knplabs

Register extension

extensions:
    nettrine.extensions.knplabs: Nettrine\Extensions\KnpLabs\DI\KnpLabsBehaviorExtension

Configuration

By default all behaviors are disabled, you have to enable them.

Most of the behaviors include a subscriber. If you use nettrine/dbal then they are configured automatically. Otherwise you have to add them to the Event manager.

Behaviors blameable, geocodable, sluggable, softDeletable, sortable, timestampable, translatable and tree have option trait (or *Trait) which allows you to swap the implementation.

Behaviors blameable, geocodable, loggable and translatable accept a callable. You may use all of following syntaxes:

# Static method call (or any other valid callable, like 'someFunction')
exampleCallable: [StaticClass, 'calledMethod']

# Service method call
exampleCallable: [@service, 'calledMethod'],

# Reference to service which implements __invoke()
exampleCallable: @serviceWhichImplements__invoke()

# Register and use new service which implements __invoke(), like you would in 'services' config section
exampleCallable:
    factory: Your\Special\Service

Enable behavior

nettrine.extensions.knplabs:
    blameable: true

Or, if you want to add additional options

nettrine.extensions.knplabs:
    blameable:
        userCallable: callable ## returns object specified by userEntity or object which implements __toString() or string
        userEntity: Your\User\Entity
        trait: YourBlameableTrait

You may use Nettrine\Extensions\KnpLabs\Security\UserCallable for Nette\Security\User::getId()

Use trait in entity

use Doctrine\ORM\Mapping as ORM;
use Knp\DoctrineBehaviors\Model as Behaviors;

class BlameableEntity
{

	use Behaviors\Blameable\Blameable;

}

Use trait in repository and implement abstract methods

use Doctrine\ORM\EntityRepository;
use Knp\DoctrineBehaviors\ORM as Behaviors;

final class FilterableRepository extends EntityRepository
{

    use Behaviors\Filterable\FilterableRepository;

    public function getLikeFilterColumns(): array
    {
        // TODO: Implement getLikeFilterColumns() method.
    }

    public function getILikeFilterColumns(): array
    {
        // TODO: Implement getILikeFilterColumns() method.
    }

    public function getEqualFilterColumns(): array
    {
        // TODO: Implement getEqualFilterColumns() method.
    }

    public function getInFilterColumns(): array
    {
        // TODO: Implement getInFilterColumns() method.
    }

}

Enable behavior

nettrine.extensions.knplabs:
    geocodable: true

Or, if you want to add additional options

nettrine.extensions.knplabs:
    geocodable:
        geolocationCallable: callable # accepts entity, returns Point|false
        trait: YourGeocodableTrait

Use trait in entity

use Doctrine\ORM\Mapping as ORM;
use Knp\DoctrineBehaviors\Model as Behaviors;

class GeocodableEntity
{

	use Behaviors\Geocodable\Geocodable;

}

Use trait in repository

use Doctrine\ORM\EntityRepository;
use Knp\DoctrineBehaviors\ORM as Behaviors;

final class GeocodableRepository extends EntityRepository
{

    use Behaviors\Geocodable\GeocodableRepository;

}

Joinable

Use trait in repository

use Doctrine\ORM\EntityRepository;
use Knp\DoctrineBehaviors\ORM as Behaviors;

final class JoinableRepository extends EntityRepository
{

    use Behaviors\Joinable\JoinableRepository;

}

Enable behavior

nettrine.extensions.knplabs:
    loggable:
        loggerCallable: callable # accepts message

You may use Knp\DoctrineBehaviors\ORM\Loggable\LoggerCallable for PSR-3 logger or Nettrine\Extensions\KnpLabs\Tracy\LoggerCallable for Tracy logger.

Use trait in entity

use Doctrine\ORM\Mapping as ORM;
use Knp\DoctrineBehaviors\Model as Behaviors;

class LoggableEntity
{

	use Behaviors\Loggable\Loggable;

}

Enable behavior

nettrine.extensions.knplabs:
    sluggable: true

Or, if you want to add additional options

nettrine.extensions.knplabs:
    sluggable:
        trait: YourSluggableTrait

Use trait in entity and implement abstract methods

use Doctrine\ORM\Mapping as ORM;
use Knp\DoctrineBehaviors\Model as Behaviors;

class SluggableEntity
{

	use Behaviors\Sluggable\Sluggable;

    public function getSluggableFields(): array
    {
        // TODO: Implement getSluggableFields() method.
    }

}

Enable behavior

nettrine.extensions.knplabs:
    softDeletable: true

Or, if you want to add additional options

nettrine.extensions.knplabs:
    softDeletable:
        trait: YourSoftDeletableTrait

Use trait in entity

use Doctrine\ORM\Mapping as ORM;
use Knp\DoctrineBehaviors\Model as Behaviors;

class SoftDeletableEntity
{

	use Behaviors\SoftDeletable\SoftDeletable;

}

Sortable

Enable behavior

nettrine.extensions.knplabs:
    sortable: true

Or, if you want to add additional options

nettrine.extensions.knplabs:
    sortable:
        trait: YourSortableTrait

Use trait in entity

use Doctrine\ORM\Mapping as ORM;
use Knp\DoctrineBehaviors\Model as Behaviors;

class SortableEntity
{

	use Behaviors\Sortable\Sortable;

}

Use trait in repository

use Doctrine\ORM\EntityRepository;
use Knp\DoctrineBehaviors\ORM as Behaviors;

final class SortableRepository extends EntityRepository
{

    use Behaviors\Sortable\SortableRepository;

}

Enable behavior

nettrine.extensions.knplabs:
    timestampable: true

Or, if you want to add additional options

nettrine.extensions.knplabs:
    timestampable:
        dbFieldType: datetime | datetimetz | timestamp | timestamptz | ... # default: datetime
        trait: YourTimestampableTrait

Use trait in entity

use Doctrine\ORM\Mapping as ORM;
use Knp\DoctrineBehaviors\Model as Behaviors;

class TimestampableEntity
{

	use Behaviors\Timestampable\Timestampable;

}

Translatable

Enable behavior

nettrine.extensions.knplabs:
    translatable: true

Or, if you want to add additional options

nettrine.extensions.knplabs:
    translatable:
        currentLocaleCallable: callable # returns current locale or null
        defaultLocaleCallable: callable # returns default locale or null
        translatableFetchMode: LAZY | EAGER | EXTRA_LAZY # default: LAZY
        translationFetchMode: LAZY | EAGER | EXTRA_LAZY # default: LAZY
        translatableTrait: YourTranslatableTrait
        translationTrait: YourTranslationTrait

Use trait in entity

use Doctrine\ORM\Mapping as ORM;
use Knp\DoctrineBehaviors\Model as Behaviors;

class TranslatableEntity
{

	use Behaviors\Translatable\Translatable;

}

Enable behavior

nettrine.extensions.knplabs:
    tree: true

Or, if you want to add additional options

nettrine.extensions.knplabs:
    tree:
        nodeTrait: YourTreeNodeTrait

Use trait in entity and implement interface

use Doctrine\ORM\Mapping as ORM;
use Knp\DoctrineBehaviors\Model as Behaviors;

class TreeEntity implements Behaviors\Tree\NodeInterface
{

	use Behaviors\Tree\Node;

}

Use trait in repository

use Doctrine\ORM\EntityRepository;
use Knp\DoctrineBehaviors\ORM as Behaviors;

final class TreeRepository extends EntityRepository
{

    use Behaviors\Tree\Tree;

}