I took the suggested solution from PHP: Good solution for MVC routing function to parse requested views? and adujsted it to our internal guidelines (Thanks again Supericy).
I have now following code:
public function parseRequestedView($url) {
$this->view_requested = explode('/', trim($url, '/'));
// Format: [0] viewpoint, [1] child, [2] action (default: show), [3] reference
$this->view_map = array(
$this->parseViewMapArrayKey('device/:reference:/configurations') => array(0, 2, -1, 1),
$this->parseViewMapArrayKey('device/:reference:') => array(0, -1, -1, 1)
);
foreach ($this->view_map as $this->view_map_transitory => $this->view_map_indices) {
if (preg_match($this->view_map_transitory, $url)) {
foreach ($this->view_map_indices as $this->view_index) {
$this->view_resources[] = $this->view_index > -1 ? $this->view_requested[$this->view_index] : null;
}
return $this->view_resources;
}
}
return false;
}
public function parseViewMapArrayKey($key) {
return '#'.str_replace([":reference:", ":string:"], ["\d+", ".+"], $key).'#';
}
It is working fine, except one small "problem":
When I switch the keys "device/:reference:" and "device/:reference:/configurations" and then invoke the view for device/:reference:/configurations, I only get the result for device/:reference.
For example, http://ww.foo.com/device/123456/configurations will output:
Array
(
[0] => device
[1] =>
[2] =>
[3] => 123456
)
Which is the result for http://ww.foo.com/device/123456. When I change the keys back to their original order, everything is like it should be:
Array
(
[0] => device
[1] => configurations
[2] =>
[3] => 123456
)
How can I reverse the search order or make the function output the right result when I switch the keys?
I found this PHP Reverse Preg_match. But it is about a negative preg_match as far as I can tell. Or I am wrong?
Thanks in advance.