Я использую воспламенитель кода.
Что я хочу сделать,
если страница посещена, которая не существует
example.com/idontexist
Затем я хочу сначала проверить базу данных, чтобы увидеть, есть ли idontexist
в базе данных.
Если это так, я хочу направить пользователя на
example.com/action/idontexist.
Как я могу это сделать?
Одним из решений было бы расширить класс 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']; }
Конечно, вам это может не понадобиться, но я надеюсь, что это даст вам некоторую идею. Таким образом, вы можете добавлять пользовательские маршруты, и поскольку вам нужно будет их извлечь из базы данных, подумайте о кешировании их для лучшей скорости.
Мне кажется, что это спрашивается каждую неделю.
Откройте 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);
}
$1
найдите его в своей базе данных и верните эту статью.
get_instance()
для загрузки URL-адресов из БД, я получаю эту ошибку:Fatal error: Class 'CI_Controller' not found in system\core\CodeIgniter.php on line 233