Направлять случайные строки в конкретный контроллер в CodeIgniter? - PullRequest
1 голос
/ 10 марта 2012

Я пытаюсь создать короткие ссылки на свое приложение в codeigniter, но у меня возникла какая-то проблема при разработке моего маршрута. Проблема в том, что мне нужен маршрут, который будет принимать строку, содержащую a-Z и цифры, и перенаправлять ее на контроллер с именем image, а строка после. Как это: app.com/randomstring -> app.com/image/randomstring. Но когда я пытаюсь сделать это в файле конфигурации маршрутов с помощью регулярного выражения, это отключает мое приложение, и я не могу ввести "нормальные" URL-адреса с уже существующими контроллерами.

Как выглядит мой маршрут прямо сейчас (я знаю, что, вероятно, он сделан очень неправильно):

$route['(^[A-Za-z0-9]+$)'] = "image/$1";

Есть ли какой-нибудь простой способ перенаправить с этим коротким URL-адресом, не используя сначала поддельный контроллер, например так: app.com/i/randomstring -> app.com/image/randomstring

А не могли бы вы помочь мне улучшить и сказать, какая часть моего регулярного выражения не работает?

1 Ответ

1 голос
/ 10 марта 2012

Как я уже упоминал в комментариях, без четко определенной спецификации относительно того, какими будут URL-адреса изображения, нет всеобъемлющего способа решить эту проблему.Даже YouTube (связанный с библиотекой , с которой вы связаны ) использует URL-адреса, такие как /watch?v=h8skj3, где "watch" - это триггер.

Использование i/r4nd0m$tring сделало бы это проблемой, и это то, что я предлагаю, но у меня была другая идея:

$route['(:any)'] = "image/$1";

// Re-Route all valid controllers
foreach (array('users', 'login', 'blog', 'signup') as $controller)
{
    $route[$controller] = $controller;
    $route[$controller.'/(:any)'] = $controller.'/$1';
}
unset($controller);

Возможно, вам понадобится последний маршрут изображения, я 'Я не уверен на 100%.Это должно направить все в image/ , кроме определенных вами контроллеров.Вы даже можете использовать glob() или что-то еще, чтобы сканировать каталог контроллера на наличие файлов PHP для заполнения массива.

Другой способ получить один символ короче i/string может состоять в использовании символьного триггера, например example.com/*randomstring, но это немного глупо, i/ намного чище и, очевидно, проще в развертывании.

...