mnapoli/metamodel

This package is abandoned and no longer maintained. No replacement package was suggested.
There is no license information available for the latest version (0.1.0) of this package.

0.1.0 2013-07-15 20:24 UTC

This package is auto-updated.

Last update: 2020-01-19 10:53:07 UTC


README

Meta is a DSL that enables to represent, traverse and operate on PHP objects.

Build Status Coverage Status

Syntax

  • Get a specific object by its ID:
Article(1)

MetaModel integrates with Doctrine, but can be connected to anything.

  • Get all objects of a type
Article(*)
  • Object graph traversing (get all the articles of a category):
Category(1).articles
  • Call methods:
// Will call generateExtract() on all articles
Article(*).generateExtract()
  • Field filtering (not implemented yet):
Article[author="bob"]

Operators:

UserGroup[ users.contains(User(1)) ]
UserGroup[ users.count() > 0 ]
  • Service:
CacheService.flush()

MetaModel integrates with containers, registries, anything…

Integration

MetaModel finds objects in data sources. You can add any data source by implementing the simple interfaces: ObjectManager or Container.

Some libraries are already supported natively:

  • Doctrine's Entity Manager: MetaModel\Bridge\Doctrine\EntityManagerBridge

    $metaModel = new MetaModel();
    $metaModel->addObjectManager(new EntityManagerBridge($entityManager));
  • PHP-DI container: MetaModel\Bridge\PHPDI\PHPDIBridge

    $metaModel = new MetaModel();
    $metaModel->addContainer(new PHPDIBridge($container));

Add your own by submitting a pull request.

Usages

Those are both ideas and work in progress.

Instead of using phpMyAdmin, or building an admin interface, you can manipulate the DB with high level object queries.

  • Advanced replacement for PropertyAccess, e.g. to build forms, templates (Twig?)

  • Simplified object queries (from database)

  • Paths for anything meta on your model: logs, AOP, ACL (e.g. "User(1) can edit Category(12).articles")

Projects using MetaModel: