Сделав директивы rewrite в файле .htaccess, я пишу свои пользовательские директивы.
class Route { public $request_url; public $url_args; public $request_method; function __construct() { $this -> request_url = $_SERVER['PATH_INFO']; $this -> url_args = explode('/', substr($_SERVER['PATH_INFO'], 1)); $this -> request_method = $_SERVER['REQUEST_METHOD']; } public function get($url, $callback) { if($this -> request_method == 'GET') { if($url == $this -> request_url){ $callback(); } elseif(strpos($url, ':')) { $new_url_args = explode('/', substr($url, 1)); if(count($new_url_args) == count($this -> url_args)) { $match = true; $args = []; for($i = 0; $i < count($this -> url_args); $i++) { if($new_url_args[$i][0] == ':') { $args[substr($new_url_args[$i], 1)] = $this -> url_args[$i]; } else { if($new_url_args[$i] != $this -> url_args[$i]){ $match = false; break; } } } if($match) { $callback($args); } } } } } }
Затем я начал и добавил несколько маршрутов следующим образом.
$route = new Route(); $route -> get('/', function() { echo "Welcome to DocsApp"; die; }); $route -> get('/test/sample', function() { echo 'tested'; die; }); $route -> get('/user/:id/:name', function($args) { echo $args['id'] . '<br />' . $args['name']; die; });
Все работает нормально.
Но каждая функция get вызывает вместо требуемого. Чтобы предотвратить это, я вызываю die
в конце успешного обратного вызова согласованного маршрута.
Есть ли лучший способ вызова конкретной функции маршрута и предотвращения ненужных вызовов?