Я написал свой собственный mvc для php, и, похоже, он работает отлично для меня. Но у меня возникают проблемы с получением контроллера и действием:
http://www.example.com/controller/action
это отлично работает, но как только небольшие изменения в URL-адресе меня нарушают, мой код разбивает приложение. например:
http://www.example.com/controller ? thi перерывы, говоря controller?
не существует,
http://www.example.com/controller/action ? thi перерывы, сказав action?
не существует,
я не могу понять, зачем это нужно ?
там, и если какое-либо тело знает более надежное, чтобы получить правильный контроллер и действия, которые я хотел бы узнать.
вот мой код:
все запросы перенаправляются на ту же страницу index.php, используя .htaccess
class Framework { .... private function setup() { $uri = (isset($_SERVER['REQUEST_URI']))?$_SERVER['REQUEST_URI']: false; $query = (isset($_SERVER['QUERY_STRING']))?$_SERVER['QUERY_STRING']: ''; $url = str_replace($query,'',$uri); $arr = explode('/',$url); array_shift($arr); $this->controller =!empty($arr[0])?$arr[0]:'home'; $this->action = isset($arr[1]) && !empty($arr[1])?$arr[1]:'index'; } }
$ _SERVER ['QUERY_STRING'] не включает ?
поэтому, когда вы делаете $url = str_replace($query,'',$uri);
, вы не меняете ?
, Поэтому он ищет контроллер с именем controller?
Существуют различные способы обойти это
'?'.$query
explode('?', $url)
чтобы отделить строку запроса от URI $_SERVER['REQUEST_URL']
(который не включает строку запроса), вместо того, чтобы получить все, а затем разделить себя Лично я бы пошел с последним вариантом, потому что везде, где код уже написан для вас, он имеет тенденцию быть более быстрым и надежным, чем все, что вы можете написать.
Вы должны устранить проблему, используя /
перед ?