Маршрутизация CodeIgniter с идентификаторами приложения и идентификаторами входа

#php #model-view-controller #codeigniter #routing #codeigniter-2

#php #модель-представление-контроллер #codeigniter #маршруты #codeigniter-2

Вопрос:

Я новичок в CodeIgniter и собираюсь использовать его для создания своего рода многоразового приложения с несколькими экземплярами приложения. Например, каждый экземпляр приложения будет иметь идентификатор «12345», а внутри этого экземпляра будут идентификаторы записей 1,2,3,4,5,6,7,8 и т.д.

для этого, я думаю, я захочу иметь возможность использовать маршрутизацию для настройки чего-то вроде:

http://example.com/12345/Entry/Details/1

Где этот URI перейдет на страницу сведений о записи ID = 1, внутри идентификатора приложения 12345. Это будет другая группа записей из URL, скажем, /12346/Entry/Details/1 . Является ли это правилом маршрутизации, которое необходимо настроить, и если да, может кто-нибудь, пожалуйста, привести пример того, как это можно настроить, а затем как я смогу использовать 12345 и 1 внутри функции. Заранее большое спасибо за вашу помощь.

Комментарии:

1. Что такое «приложение» в этом контексте?

2. По сути, это конкурс голосования за фотографии, но мы хотим иметь возможность повторно использовать его несколько раз, поэтому мы создаем «конкурс», который, я думаю, я назвал «приложение», и у этого конкурса будет идентификатор. Внутри каждого конкурса все фотографии, за которые мы будем голосовать, будут иметь свой собственный идентификатор, например: example.com {Идентификатор объекта}/{класс}/{функция}/{Фотоид}

Ответ №1:

Я бы посоветовал вам маршрутизировать свои URL-адреса следующим образом:

 $route['(:any)/{controller_name}/(:any)/(:any)'] = '{controller_name}/$2/$3/$1';
  

так что последним параметром для функции всегда является идентификатор приложения (12345/12346). Это означает, что ваши функции контроллера входа будут выглядеть следующим образом:

 class Entry extends CI_Controller
{
   function Details(var1, var2, ..., varn, app_id){}

   function Someother_Function (var 1, app_id){}
}
  

вам также нужно будет добавить маршрут для функций, которые не имеют ничего, кроме идентификатора app_id:

 $route['(:any)/{controller_name}/(:any)'] = '{controller_name}/$2/$1'; //This may work for everything.
  

Я надеюсь, что это то, о чем мы вас спрашиваем…

Редактировать:

Если вы собираетесь использовать только числа, которые вы могли бы использовать (:num) вместо (:any)

Ответ №2:

Вы можете добиться такой маршрутизации, добавив это правило в application/config/routes.php файл:

 $route['default_controller'] = "yourdefaultcontroller";
$route['404_ovverride'] = "";
// custom route down here:
$route['(:num)/entry/details/(:num)'] = "entry/details/$1/$2",
  

конечно, предполагая, что ваш URI похож на пример.

В вашем контроллере «Entry» у вас будет метод «details», который принимает 2 параметра, $contestID и $photoID , где $contestID — уникальный экземпляр, который вы назначаете, в то время $photoID как другая (предполагаемая) переменная вашего URL (последний сегмент).

 class Entry extends CI_Controller(
{
    function details {$contestID, $photoID)
    { //do your codeZ here }
}
  

Дополнительную информацию об этом см. В разделе Маршрутизация URI. Вы также можете рассмотреть __remap() переопределяющую функцию, в случае.