Intereting Posts
Google OAuth2 (401) Недействительные учетные данные Коллекция объектов Symfony2 – как добавить / удалить связь с существующими объектами? Использование неопределенной константы CURLOPT_POST – предполагается 'CURLOPT_POST' Расширение синглотонов в PHP FatalErrorException: Ошибка: вызов функции-члена имеет () для не-объекта Codeigniter: Тип файла, который вы пытаетесь загрузить, не разрешен. Вчера все было хорошо вычисление строки луча – javascript для php Есть ли хорошие учебники по использованию PDO? Найти общие значения в нескольких массивах с помощью PHP Как «разблокировать» поле в форме CakePHP, когда оно является частью ассоциации hasMany Как создать дружественные URL-адреса с помощью .htaccess? Зачем использовать шаблонный движок с каркасом? PDO отправляет необработанный запрос в MySQL, в то время как Mysqli отправляет подготовленный запрос, оба дают тот же результат Выяснив, почему я получаю ошибку ID ресурса №5 Phpmyadmin экспортирует VIEW без DATABASE_NAME или ALGORITHM

MVC считывает URL-адрес контроллера и действия

Я написал свой собственный 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'; } } 

Related of "MVC считывает URL-адрес контроллера и действия"

$ _SERVER ['QUERY_STRING'] не включает ? поэтому, когда вы делаете $url = str_replace($query,'',$uri); , вы не меняете ? , Поэтому он ищет контроллер с именем controller?

Существуют различные способы обойти это

  • замените на '?'.$query
  • Используйте explode('?', $url) чтобы отделить строку запроса от URI
  • Получите $_SERVER['REQUEST_URL'] (который не включает строку запроса), вместо того, чтобы получить все, а затем разделить себя

Лично я бы пошел с последним вариантом, потому что везде, где код уже написан для вас, он имеет тенденцию быть более быстрым и надежным, чем все, что вы можете написать.

Вы должны устранить проблему, используя / перед ?