Esempio n. 1
0
 /**
  * Instanciate an object uri from a string 
  * (ex: '1', '/1', '@backend/1', '/table/1', '@backend/table/1', 'mysql://*****:*****@host:port/database/table/1')
  *
  * @param string $str
  * @param t41\Backend\BackendUri $backendUri
  */
 public function __construct($str = null, Backend\BackendUri $backendUri = null)
 {
     if (!is_null($str)) {
         $this->setUrl($str);
         $parts = explode('/', $str);
         // we only got one identifier, use default backend or passed one
         if (count($parts) == 1) {
             $this->_backendUri = $backendUri ? $backendUri->getUri() : Backend::getDefaultBackend()->getUri();
             $this->_identifier = $str;
         } else {
             if (substr($parts[0], 0, 1) == Backend::PREFIX) {
                 $this->_backendUri = $backendUri ? $backendUri : Backend::getBackendUri($parts[0]);
                 $this->_identifier = $parts[count($parts) - 1];
                 unset($parts[count($parts) - 1]);
                 unset($parts[array_search($this->_backendUri->getDbName(), $parts)]);
                 unset($parts[array_search($this->_backendUri->getAlias(), $parts)]);
                 $this->_url = implode('/', $parts);
             } else {
                 if ($backendUri) {
                     $this->_backendUri = $backendUri ? $backendUri : Backend::getBackendUri($parts[0]);
                     $this->_url = $str;
                 } else {
                     // uri contains a backend reference which is not an alias
                     // @todo implement tests
                     throw new Exception('litteral backend definition not yet implemented');
                 }
             }
         }
     }
 }