динамическая маршрутизация воспламенителя кода

0

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

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

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

example.com/idontexist

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

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

example.com/action/idontexist.

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

Теги:
codeigniter
routes

2 ответа

2
Лучший ответ

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

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'];
}

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

  • 0
    Теперь, когда я пытаюсь загрузить CI с помощью get_instance() для загрузки URL-адресов из БД, я получаю эту ошибку: Fatal error: Class 'CI_Controller' not found in system\core\CodeIgniter.php on line 233
3

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

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

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

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

//EDIT: с помощью этого вы можете перейти 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);
}
  • 0
    Не совсем то, что я спрашиваю. Я не хочу, чтобы это приводилось в действие статическим файлом. Идея в том, что я могу добавить статью в базу данных, и тогда она станет маршрутом, но я не хочу иметь / article / acticle / что угодно. Получите мою точку зрения?
  • 0
    Вы должны сделать эту проверку внутри вашего контроллера. Это просто направляет запросы в ваш контроллер и дает вам доступ к входу. Просто возьмите аргумент $1 найдите его в своей базе данных и верните эту статью.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню