[Experimental] Language for traversing and performing actions on your model
Switch branches/tags
Nothing to show
Clone or download
Latest commit 8d87c7d Aug 19, 2013
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
doc Documentation Jul 15, 2013
src/MetaModel bugfix in PHP-DI bridge Aug 19, 2013
tests Added support for selecting all instances of a class Jul 23, 2013
.gitattributes First commit Feb 25, 2013
.gitignore First commit Feb 25, 2013
.travis.yml Coveralls integration Jul 18, 2013
README.md Readme Aug 19, 2013
composer.json Tabs to spaces Aug 19, 2013
phpunit.xml First commit Feb 25, 2013

README.md

MetaModel

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: