CodeIgniter: эффективная маршрутизация - PullRequest
0 голосов
/ 14 ноября 2011

Скажем, у меня есть социальная сеть, которая принимает:

короткий URL с использованием псевдонима: например, -> www.mynetwork.com/john.doe 256-битные хэши AES: например, -> www.mynetwork.com/23fdgfdjhdbfuyviofhedfbncxgersbzc34...

Я хочу направить их к одному контроллеру, например, «Профиль», где:

версия короткого URL переходит к функции, подобной: fetch ($ nick), в которой, я хэши ник для aes, затем делаю редирект для вызова функции: view ($ hash)

Функция просмотра - это та, которая фактически имеет логику для чего-то вроде отображения профиля этого пользователя.

это гарантирует, что в любом случае, в котором я выбираю посещение профиля, будь то короткий URL или хэш, я всегда получаю перенаправление на вызов URL хеша ...

как я могу это сделать? я думаю, что это как-то связано с маршрутами, но я немного растерялся, как с этим справиться ...

для краткости, доступ к: www.mynetwork.com/john.doe перенаправляет на сайт: www.mynetwork.com/23fdgfdjhdbfuyviofhedfbncxgersbzc34 и отображает профиль этого пользователя

и, конечно, прямой доступ к www.mynetwork.com/23fdgfdjhdbfuyviofhedfbncxgersbzc34 просто отобразит профиль пользователя

1 Ответ

1 голос
/ 14 ноября 2011

Если вы не желаете использовать разные URL для разных функций, например:

www.mynetwork.com/nick/john.doe
www.mynetwork.com/hash/23fdgfdjhdbfuyviofhedfbncxgersbzc34

Затем вам нужно написать функцию, которая может дифференцировать ник и хеш. В ваших примерах CodeIgniter видит это как для nick, так и для hash:

www.mynetwork.com/{someArg}

Вы могли бы сделать что-то вроде этого:

www.mynetwork.com/view/nickOrHash

Контроллер:

class View extends CI_Controller
{
    public function index($arg)
    {
        if (strlen($arg) < length_of_hash)
        {
            viewByNick($arg);
        }
        else
        {
            viewByHash($arg);
        }
    }

    public function viewByNick($arg)
    {
    }

    public function viewByHash($arg)
    {
    }
}

Вам также придется отредактировать URI-маршрутизацию для CodeIgniter, чтобы он отправлял nickOrHash в качестве аргумента index и не выполнял поиск функции с именем nickOrHash в view controller (http://codeigniter.com/user_guide/general/routing.html)

В приведенном выше коде замените length_of_hash длиной, равной 256-битному хешу AES, всегда будет иметь

EDIT:

Другой, более надежный способ определить, является ли аргумент ником или хэшем, может быть:

  1. Вы получаете аргумент. Проверьте в базе данных, существует ли пользователь с хешем аргумента. Если существует, звоните viewByHash($arg)
  2. Если не существует, хэшируйте $arg и проверьте базу данных еще раз, если существует пользователь с новым хешем. Если существует, вызовите viewByHash(newHash) с вычисленным хешем.
  3. Если не существует, error 404

Маршрутизация:

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

Если пользователь запрашивает URL mynetwork.com/view/arg, codeIgniter вызовет метод index() в view controller, передав в качестве аргумента последнюю часть URL-адреса запроса пользователя.

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

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

Если вышеприведенная функция завершилась неудачно, проверьте имя пользователя и т. Д.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...