Shanty_Mongo::init PHP 메소드

init() 공개 정적인 메소드

Initialise Shanty_Mongo. In particular all the requirements.
public static init ( )
    public static function init()
    {
        // If requirements are not empty then we have already initialised requirements
        if (static::$_initialised) {
            return;
        }
        // Custom validators
        static::storeRequirement('Validator:Array', new Shanty_Mongo_Validate_Array());
        static::storeRequirement('Validator:MongoId', new Shanty_Mongo_Validate_Class('MongoId'));
        static::storeRequirement('Validator:MongoDate', new Shanty_Mongo_Validate_Class('MongoDate'));
        static::storeRequirement('Document', new Shanty_Mongo_Validate_Class('Shanty_Mongo_Document'));
        static::storeRequirement('DocumentSet', new Shanty_Mongo_Validate_Class('Shanty_Mongo_DocumentSet'));
        // Stubs
        static::storeRequirement('Required', new Shanty_Mongo_Validate_StubTrue());
        static::storeRequirement('AsReference', new Shanty_Mongo_Validate_StubTrue());
        static::storeRequirement('Ignore', new Shanty_Mongo_Validate_StubTrue());
        // Requirement creator for validators
        static::storeRequirementCreator('/^Validator:([A-Za-z]+[\\w\\-:]*)$/', function ($data, $options = null) {
            $instanceClass = $data[1];
            if (!class_exists($instanceClass)) {
                $instanceClass = 'Zend_Validate_' . $instanceClass;
                if (!class_exists($instanceClass)) {
                    return null;
                }
            }
            if (!is_null($options)) {
                $validator = new $instanceClass($options);
            } else {
                $validator = new $instanceClass();
            }
            if (!$validator instanceof Zend_Validate_Interface) {
                return null;
            }
            return $validator;
        });
        // Requirement creator for filters
        static::storeRequirementCreator('/^Filter:([A-Za-z]+[\\w\\-:]*)$/', function ($data, $options = null) {
            $instanceClass = $data[1];
            if (!class_exists($instanceClass)) {
                $instanceClass = 'Zend_Filter_' . $instanceClass;
                if (!class_exists($instanceClass)) {
                    return null;
                }
            }
            if (!is_null($options)) {
                $validator = new $instanceClass($options);
            } else {
                $validator = new $instanceClass();
            }
            if (!$validator instanceof Zend_Filter_Interface) {
                return null;
            }
            return $validator;
        });
        // Creates requirements to match classes
        $classValidator = function ($data) {
            if (!class_exists($data[1])) {
                return null;
            }
            return new Shanty_Mongo_Validate_Class($data[1]);
        };
        static::storeRequirementCreator('/^Document:([A-Za-z]+[\\w\\-]*)$/', $classValidator);
        static::storeRequirementCreator('/^DocumentSet:([A-Za-z]+[\\w\\-]*)$/', $classValidator);
        static::$_initialised = true;
    }

Usage Example

예제 #1
0
 public function __construct($data = array(), $config = array())
 {
     // Make sure mongo is initialised
     Shanty_Mongo::init();
     $this->_config = array_merge($this->_config, $config);
     $this->_references = new SplObjectStorage();
     // If not connected and this is a new root document, figure out the db and collection
     if ($this->isNewDocument() && $this->isRootDocument() && !$this->isConnected()) {
         $this->setConfigAttribute('connectionGroup', static::getConnectionGroupName());
         $this->setConfigAttribute('db', static::getDbName());
         $this->setConfigAttribute('collection', static::getCollectionName());
     }
     // Get collection requirements
     $this->_docRequirements = static::getCollectionRequirements();
     // apply requirements requirement modifiers
     $this->applyRequirements($this->_config['requirementModifiers'], false);
     // Store data
     $this->_cleanData = $data;
     // Initialize input data
     if ($this->isNewDocument() && is_array($data)) {
         foreach ($data as $key => $value) {
             $this->getProperty($key);
         }
     }
     // Create document id if one is required
     if ($this->isNewDocument() && ($this->hasKey() || isset($this->_config['hasId']) && $this->_config['hasId'])) {
         $this->_data['_id'] = new MongoId();
         $this->_data['_type'] = static::getCollectionInheritance();
     }
     // If has key then add it to the update criteria
     if ($this->hasKey()) {
         $this->setCriteria($this->getPathToProperty('_id'), $this->getId());
     }
     $this->init();
 }
All Usage Examples Of Shanty_Mongo::init