mnapoli / metamodel
Requires
- doctrine/orm: 2.3.*
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.
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.
- MetaConsole: Simplified Model/DB manipulation from console
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 editCategory(12).articles
")
Projects using MetaModel: