#php #url-routing
#php #url-маршрутизация
Вопрос:
Я изучаю шаблон MVC, чтобы улучшить свои навыки кодирования, в качестве упражнения я пишу эту систему маршрутизации для сопоставления действий и параметров с соответствующими контроллерами. Я протестировал код, и он отлично работает, но я не могу понять, как сопоставить несколько параметров контроллеру. Вот мой код, кто-нибудь может предложить мне лучший способ сделать это?
<?php
if( isset($_SERVER['REQUEST_URI']) ){
$requested_uri = parse_url( $_SERVER['PATH_INFO'], PHP_URL_PATH);
if( $requested_uri === '' ){
echo $controller->index();
}
elseif( $requested_uri != '' ){
$requested_uri = explode('/', $_SERVER['PATH_INFO']);
$class = (string) ucfirst($requested_uri[1]).'Controller';
$method = (string) $requested_uri[2];
if( isset($requested_uri[3]) amp;amp; class_exists($class) ){
$param = (string) $requested_uri[3];
$obj = new $class;
echo $obj->$method($param);
}
else{
if( class_exists( $class ) ){
$obj = new $class;
echo $obj->$method();
}
}
}
}
?>
Ответ №1:
код решения здесь :
<?php
if( isset($_SERVER['REQUEST_URI']) ){
$requested_uri = parse_url( $_SERVER['PATH_INFO'], PHP_URL_PATH);
if( $requested_uri === '' ){
echo $controller->index();
}
elseif( $requested_uri != '' ){
$requested_uri = explode('/', $_SERVER['PATH_INFO']);
$class = (string) ucfirst($requested_uri[1]).'Controller';
$method = (string) $requested_uri[2];
//----- below part is my idea ...
$params = array();
for($i=3 ; $i<=count(requested_uri) ; $i ){
$params = requested_uri[$i];
}
$controllerInstance = new $class();
call_user_func_array(array($controllerInstance , $method) , $params);
//---- end part
}
}
?>
Комментарии:
1. вместо
for()
цикла, не лучше ли использоватьforeach()
?