Предположим, у вас есть контроллер под названием «Автор», функция в нем называется «страница», которая получает в качестве параметра имени пользователя:
class Author extends CI_Controller {
public function page($username = null) {
if($username == null) { //checking for forced url page load without username specified
//do a 404 redirect
} else {
$this->load->model('m_users');
if($this->m_users->exists($username)) { // checking if requested username exists
//do stuff with the user here
} else { //otherwise redirect
//do a 404 redirect
}
}
}
тогда я хотел бы использовать следующий код в нижней части конфигурации/routes.php маршрут "your-domain.com/author/page/username " «your-domain.com/username»
if($handle = opendir(APPPATH.'/controllers')) {
while(false !== ($controller = readdir($handle))) {
if($controller != '.' && $controller != '..' && strstr($controller, '.') == '.php') {
$route[strstr($controller, '.', true)] = strstr($controller, '.', true);
$route[strstr($controller, '.', true).'/(:any)'] = strstr($controller, '.', true).'/$1';
}
}
closedir($handle);
}
$route['([a-zA-Z0-9_-]+)'] = 'author/page/$1';
это будет маршрут любой запрос вида your-domain.com/whatever к your-domain.com/author/page/whatever только если Контроллер с именем «Whatever» не существует. Если он существует, он получит доступ к контроллеру.
В ADITION, после всего этого, если вы хотите сделать что-то вроде your-domain.com/login на пути к your-domain.com/auth/login вы можете сделать это, добавив следующую строку к вашему конфигурации/routes.php
//...
$route['login'] = 'auth/login'; //add this line before the one specified above
$route['([a-zA-Z0-9_-]+)'] = 'author/page/$1';
лол @ '// VALIDATE щеколда из $ username' – BoltClock