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; }
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; }