2017-02-08 9 views
0

Я строю свой собственный фреймворк для учебных целей, и он до сих пор довольно хорош, кроме одного, маршрутизации.Url Routing Placeholder Matching Regex

Скажем, URL-адрес localhost/admin/view, у меня нет проблем с этим маршрутом с правильным контроллером и действиями. Проблема возникает, когда url имеет идентификатор, похожий на следующий: localhost/admin/view/12. Я пытаюсь использовать заполнители в моем массиве маршрутов (каркасный подход), который содержит определенные маршруты для соответствия URL-адресу.

Вот что массив маршрут выглядит следующим образом:

public function getRoute() { 
    $this->route = array(
     [ 
      'url' => "admin/view", 
      'controller' => 'AdminController', 
      'action' => 'viewPosts', 
      'type' => 'GET' 
     ], 
     [ 
      'url' => "admin/view/{id}", 
      'controller' => 'AdminController', 
      'action' => 'viewPostById', 
      'type' => 'GET' 
     ], 
     [ 
      'url' => "admin/store/posts", 
      'controller' => 'AdminController', 
      'action' => 'storePosts', 
      'type' => 'POST' 
     ], 
    ); 
} 

Я не знаю, как в соответствии с URL со значением из массива маршрута, который имеет заполнитель. Например, если url - localhost/admin/view/1, как я могу сопоставить его со значением admin/view/{id} из массива? А потом как мне легко получить параметр GET из URL? Я знаю, что получение параметров не должно быть слишком сложным, но я пытаюсь получить их, не взрывая URL-адрес и не выполняя слишком много операций (возможно, с регулярным выражением?).

ответ

1

Вы должны использовать другой подход в сопоставлении маршрутов. Я предлагаю вам посмотреть, как с ним работают другие структуры (поиск и просмотр того, как работает .htaccess). Итак, вы должны использовать регулярное выражение для обработки совпадений, в случае с администратором/представлением/{id}, вы можете рассмотреть примерно следующее: admin/view/.* Для этого случая все после admin/view/ будет вашим идентификатором.

Вы также можете прочитать docummentation из других структур, как CakePHP: https://book.cakephp.org/3.0/en/development/routing.html

В PHP есть функции, чтобы получить строку запроса: $ _SERVER [ 'QUERY_STRING'] (http://se2.php.net/reserved.variables.server.php)

С уважением.

+0

Возможно, я не очень хорошо его объяснял, но мой .htaccess перенаправляет все на index.php с чистым URL-адресом, как это делают рамки. Я просто просил заполнителя, как {id}, потому что так работает laravel. Btw admin/view /.* Я уже пробовал что-то подобное с admin/view /. \ D * $, но я не нашел его довольно, я хотел быть с заполнителями. Не могли бы вы немного объяснить, как внутренний механизм фреймворков обычно работает для маршрутизации, а не как их использовать, но больше похоже на то, как фреймворки обрабатывают URL-адрес так, как они разделяют его и отправляют и т. Д.? –

 Смежные вопросы

  • Нет связанных вопросов^_^