динамическая маршрутизация воспламенителя кода - PullRequest
0 голосов
/ 21 апреля 2011

Я использую воспламенитель кода.

Что я хочу сделать, это

, если посещенная страница не существует

example.com /idontexist

Затем я хочу сначала проверить базу данных, чтобы увидеть, есть ли в базе данных idontexist.

Если это так, я хочу направить пользователя к

example.com / action / idontexist.

Как я могу это сделать?

Ответы [ 2 ]

3 голосов
/ 21 апреля 2011

Мне кажется, что об этом спрашивают каждую неделю.

Откройте свой application/config/routes.php, затем добавьте что-то вроде этого:

$route['^(:any)'] = "my_controller/get_article/$1";

Обратите внимание, что все будет перенаправлено на контроллерназывается action.Если у вас есть другие контроллеры, то вы также должны добавить для них маршрут (желательно, расположенный перед этим).

// РЕДАКТИРОВАТЬ: Используя это, вы можете перейти к http://your-site.com/secrets-of-internet-marketing, и он вызовет функцию get_article вmy_controller контроллер, и передайте "secrets-of-internet-marketing" в качестве первого аргумента.Который затем может обрабатывать что-то вроде этого:

public function get_article($article_name) { 
    // something like this: 
    $article = $this->article_model->get_model_by_name($article_name);
    $this->load->view('article', $article);
}
2 голосов
/ 24 апреля 2011

Одним из решений было бы расширить класс CI_Router вашим собственным в application / core / MY_Router.php и просто скопировать метод _set_routing () в ваш класс.Ваши изменения пойдут куда-нибудь после того, как файл rout.php будет включен и для него установлено свойство $ this-> router, вы можете добавить свои собственные маршруты.

include(APPPATH.'config/routes'.EXT);
...
$this->routes = ( ! isset($route) OR ! is_array($route)) ? array() : $route;
unset($route);

//Get your custom routes:
$your_routes = $this->_get_custom_routes();
foreach($your_routes as $custom_route)
{
    $this->routes[$custom_route['your_regex_match']] = $custom_route['controller'].'/'.$custom_route['action'];
}

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

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