Changeset View
Changeset View
Standalone View
Standalone View
src/aphront/AphrontURIMapper.php
<?php | <?php | ||||
final class AphrontURIMapper { | final class AphrontURIMapper { | ||||
private $map; | private $map; | ||||
final public function __construct(array $map) { | public function __construct(array $map) { | ||||
$this->map = $map; | $this->map = $map; | ||||
} | } | ||||
final public function mapPath($path) { | public function mapPath($path) { | ||||
$map = $this->map; | $map = $this->map; | ||||
foreach ($map as $rule => $value) { | foreach ($map as $rule => $value) { | ||||
list($controller, $data) = $this->tryRule($rule, $value, $path); | list($controller, $data) = $this->tryRule($rule, $value, $path); | ||||
if ($controller) { | if ($controller) { | ||||
foreach ($data as $k => $v) { | foreach ($data as $k => $v) { | ||||
if (is_numeric($k)) { | if (is_numeric($k)) { | ||||
unset($data[$k]); | unset($data[$k]); | ||||
} | } | ||||
} | } | ||||
return array($controller, $data); | return array($controller, $data); | ||||
} | } | ||||
} | } | ||||
return array(null, null); | return array(null, null); | ||||
} | } | ||||
final private function tryRule($rule, $value, $path) { | private function tryRule($rule, $value, $path) { | ||||
$match = null; | $match = null; | ||||
$pattern = '#^'.$rule.(is_array($value) ? '' : '$').'#'; | $pattern = '#^'.$rule.(is_array($value) ? '' : '$').'#'; | ||||
if (!preg_match($pattern, $path, $match)) { | if (!preg_match($pattern, $path, $match)) { | ||||
return array(null, null); | return array(null, null); | ||||
} | } | ||||
if (!is_array($value)) { | if (!is_array($value)) { | ||||
return array($value, $match); | return array($value, $match); | ||||
Show All 14 Lines |