Skip to content
This repository has been archived by the owner on Oct 27, 2019. It is now read-only.

mnapoli/MetaModel

master
Switch branches/tags

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
Code

Latest commit

 

Git stats

Files

Permalink
Failed to load latest commit information.
Type
Name
Latest commit message
Commit time
doc
 
 
 
 
 
 
 
 
 
 
 
 

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:

About

[Experimental] Language for traversing and performing actions on your model

Resources

Stars

Watchers

Forks

Packages

No packages published

Languages