#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()
переопределяющую функцию, в случае.