1
我试图做一个奇特的路由器,这个想法是:转换多个字符串成一个多维数组
'{subdomain}.{request type}.{uri}' => '{controller}@{method}'
和我有什么到目前为止是这样的:
路线.PHP
return [
'.GET.' => '[email protected]',
'.GET.user/*' => '[email protected]',
'.GET.user/*/comments' => '[email protected]',
];
Router.php
class Router {
private $routes, $uri, $subdomain;
public function __construct() {
$this->routes = $this->parseRoutes(require 'app/routes.php');
$this->subdomain = $this->getSubdomain();
$this->uri = $this->getUri();
}
private function getSubdomain() {
$url = explode('.', $_SERVER['SERVER_NAME']);
return (count($url) >= 3) ? current($url) : '';
}
private function getUri() {
$uri = preg_replace('#\/{2,}#', '/', urldecode($_SERVER['REQUEST_URI']));
return trim(str_replace(' ', '', $uri), '/');
}
private function parseRoutes($routes) {
$return = [];
foreach($routes as $route => $controller) {
$route = explode('.', $route);
$uri = explode('/', $route[2]);
$return[$route[0]][$route[1]][$route[2]] = $controller;
}
return $return;
}
public function getController() {
}
}
的parseRoutes
方法需要将数组转换成这样:
[
'' => [
'GET' => [
'' => '[email protected]',
'user' => [
'*' => [
'' => '[email protected]',
'comments' => '[email protected]'
],
],
],
],
]
我可以得到subdomain
和request type
正常工作,但我不知道如何将URI转换成类似的格式那。
我不确定你在问什么。您可以获取请求的子域并输入,但是您不知道如何将uri转换为这种格式?你有没有想过哪些部分需要在哪里以及如何才能到达那里? –
来自'routes.php'的数组需要转换成我在底部给出的例子。 – user3117244