Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/jrschumacher/modomo

Lightweight, eventful PHP MongoDB ODM
https://github.com/jrschumacher/modomo

Last synced: about 2 hours ago
JSON representation

Lightweight, eventful PHP MongoDB ODM

Awesome Lists containing this project

README

        

# THIS REPO IS NO LONGER MAINTAINED.
## PLEASE USE https://github.com/purekid/mongodm

# Modomo (mŏ-dŏ-mŏ)

[![Latest Stable Version](https://poser.pugx.org/jrschumacher/modomo/version.png)](https://packagist.org/packages/jrschumacher/modomo)
[![Latest Unstable Version](https://poser.pugx.org/jrschumacher/modomo/v/unstable.png)](https://packagist.org/packages/jrschumacher/modomo)

Modomo is a lightweight, event based PHP MongoDB ODM

Designed for the benefits of ODMs (getters and setters, validation and helpers) while maintaining a quick development and low entry level.
All the while proxying MongoDB Core PHP classes for direct access to the MongoDB driver; no custom routines here.

## Features

* Basic ODM features
* Simple document classes
* Simple collection classes
* Validations
* Events and callbacks
* Direct access to MongoDB driver

## Requirements

* PHP 5.3+
* MongoDB Driver

## Installation

### Manual

Extract the source files into a directory in your application library path. Either autoload or require all classes.

### Composer

To add via Composer using Packagist[[jrschumacher/modomo](https://packagist.org/packages/jrschumacher/modomo)] add to your composer.json

```json
{
"require": {
"jrschumacher/modomo": "0.6.*"
}
}
```

## Usage

Using Modomo is very simple. As a basic rule of thumb, if you use the Modomo\MongoClient() everything else will fall in place.
Yet it isn't limited to that, at any point you can turn a Mongo Core Class object into a Modomo object.

### Basic

Using MongoDM is as simple as declaring classes that are extensions of the base ODM class and specifying a namespace.

```php

```

```php

```

```php
test;
$coll = $db->person;

$bob = new Person(array(), $coll);
$bob->name = "Bob";
$bob->save();

$people = $coll->find();
$bob = $people->getNext();
$bob->getDoc; // array('name' => 'Bob', '_id' => array('$id' => '12345....'));
?>
```

### Configuration

Modomo supports some configuration for storing your collections and documents. This can simply be changed via `Modomo\Config` class which has some static variables to help you out.

_Warning: Due to it's dynamic nature it will change future states._

```php

```

#### Namespaces

The namespace for the collections or documents may be changed via the `$collecionNS` and `$documentNS` variables. By default they resolve to `\Collections` and '\Documents' respectively.

_Note: use a double slash `\\` when implementing a sub namespace_

```php

```

#### Class Names

The class names for collections and documents may be changed via the `$collectionClass` and `$documentClass` variables. By default they resolve to the name of the MongoDB collection in `StudlyCaps` (see [PSR-1](https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-1-basic-coding-standard.md))

A string replace is executed to provide more flexibility with your class names. Following is a list of supported patterns:

```php

```

```
Pattern Description
-------------------------------------------------------------------------
{{mongo.coll}} Replaced with the collection name StudlyCapped
```

***Other replacements will be added upon request and discussion***

_Notes:_

- `mongo` is reserved for MongoDB related replacements

### Document

### CRUD Methods

### Other Methods

### Validators

### Events / Callbacks

A number of events exist throughout Modomo. You can hook into these events by registering your callable method with your collection.

#### Event Hooks

- beforeCreate
- beforeCreateNew
- afterCreate
- afterCreateNew
- beforeSave
- beforeSaveNew
- afterSave
- afterSaveNew
- beforeValidation
- afterValidation
- beforeDestroy

In a new, save, destroy cycle, the validations are called in the following order:

`beforeCreateNew -> afterCreateNew -> beforeValidation -> afterValidation -> beforeSaveNew -> afterSaveNew -> beforeDestroy`

```php

```