Ejemplo n.º 1
0
 public function match($params)
 {
     if (!$this->_match($params)) {
         return false;
     }
     if (isset($params[0])) {
         $id = $params[0];
         $slugs = $this->_read();
         if (isset($slugs[$id])) {
             $slug = $slugs[$id];
         } elseif ($this->_validateType($this->_getModel(), $id) && ($result = $this->_lookup(array($this->lookup => $id)))) {
             $slug = $result[$this->_getModel()->alias][$this->display];
         }
         if (isset($slug)) {
             $params[$this->named] = $this->_urlencode ? rawurlencode($slug) : $slug;
             unset($params[0]);
             $params = $this->_normalizePass($params);
             return parent::match($params);
         }
     }
     return false;
 }
Ejemplo n.º 2
0
 public function match($params)
 {
     if (!$this->_match($params)) {
         return false;
     }
     if (isset($params[0])) {
         $id = $params[0];
         if (!($slugs = $this->mapped($id))) {
             if (!$this->_validateType($this->_getModel(), $id)) {
                 return false;
             }
             $data = $this->_lookup(array($this->_getModel()->escapeField() => $id));
             if (empty($data)) {
                 return false;
             }
             $slugs = array();
             foreach ($this->_slugOptions as $slug => $options) {
                 $alias = $this->_getModel($options['model'])->alias;
                 $field = $this->getOption('display', $options);
                 if (!isset($data[$alias][$field])) {
                     return false;
                 }
                 $slugs[$slug] = $data[$alias][$field];
             }
             $this->map($id, $slugs);
         }
         foreach ($this->_slugOptions as $slug => $options) {
             $params[$slug] = $slugs[$slug];
             $callbacks = $this->getOption('callbacks', $options);
             if ($callbacks['match'] !== false) {
                 $params[$slug] = $callbacks['match']($params[$slug]);
             }
             if ($urlencode = $this->getOption('urlencode', $options)) {
                 $encodeMethod = $urlencode === true ? 'rawurlencode' : $urlencode;
                 $params[$slug] = $encodeMethod($params[$slug]);
             }
         }
         unset($params[0]);
         $params = $this->_normalizePass($params);
         $url = parent::match($params);
         return $url;
     }
     return false;
 }