Если вы не желаете использовать разные 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:
Другой, более надежный способ определить, является ли аргумент ником или хэшем, может быть:
- Вы получаете аргумент. Проверьте в базе данных, существует ли пользователь с хешем аргумента. Если существует, звоните
viewByHash($arg)
- Если не существует, хэшируйте
$arg
и проверьте базу данных еще раз, если существует пользователь с новым хешем. Если существует, вызовите viewByHash(newHash)
с вычисленным хешем.
- Если не существует,
error 404
Маршрутизация:
$route['view/(:any)'] = "view/index/$1";
Если пользователь запрашивает URL mynetwork.com/view/arg
, codeIgniter вызовет метод index()
в view controller
, передав в качестве аргумента последнюю часть URL-адреса запроса пользователя.
Вы можете изменить его на что-то вроде этого, если хотите проверить напрямую по хешу:
$route['view/(:any)'] = "view/viewByHash/$1";
Если вышеприведенная функция завершилась неудачно, проверьте имя пользователя и т. Д.