Router -> db

1 view
Skip to first unread message

Kerrygun

unread,
May 20, 2008, 7:13:10 AM5/20/08
to СodeIgniter-ru
Привет.

Начал разбираться с codeigniter и первое во что я уперся, и что мне
сразу не понравилось - то что роутер нужно писать в конфиге ручками. А
мне бы хотелось выгребать роутеры из базы. Но тут сразу всплывает тот
факт, что в момент срабатывания роутера сам контроллер ещё не
инициализирован, а соответственно не возможно воспользоваться $this-
>db и кэшем запросов.

Может кто-нибудь сказать, возможно ли добиться того чего я хочу
(хранить структуру(роутинг) в базе) и что для этого мне придется там
сделать?

mihailt

unread,
May 21, 2008, 6:20:51 AM5/21/08
to СodeIgniter-ru
а нафиг? и кстати если юзаем фреймворк, то это не значит, что
стандарные возможности языка отменены )) читаем
http://lv.php.net/manual/en/book.mysqli.php
, но я бы не стал.

Mityok

unread,
May 21, 2008, 5:29:04 PM5/21/08
to СodeIgniter-ru
Пробовал решить данную задачу - пока получилось только в обход
фреймворка (стандартными средствами php) читать правила из базы, при
этом конфигурацию подключения к БД брать из конфига фреймворка. Если
найдете более элегантное решение - дайте знать.

Kerrygun

unread,
May 22, 2008, 11:45:29 AM5/22/08
to СodeIgniter-ru
> а нафиг? и кстати если юзаем фреймворк, то это не значит, что
> стандарные возможности языка отменены )) читаем http://lv.php.net/manual/en/book.mysqli.php
> , но я бы не стал.

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

Zhulanov

unread,
May 23, 2008, 3:25:01 AM5/23/08
to СodeIgniter-ru
Если надо красиво, то модифицируйте router library, чтоб библиотека
выгребала правила из БД.

mihailt

unread,
May 23, 2008, 7:20:36 AM5/23/08
to СodeIgniter-ru
хранить роуты в базе данных тоже очень не красиво.

On 22 май, 18:45, Kerrygun <kerry...@gmail.com> wrote:
> > а нафиг? и кстати если юзаем фреймворк, то это не значит, что
> > стандарные возможности языка отменены )) читаемhttp://lv.php.net/manual/en/book.mysqli.php

tristan

unread,
May 23, 2008, 3:47:53 PM5/23/08
to СodeIgniter-ru
Может я до конца не понял задачу, но мне кажетса все просто
1) в роутинги настаиваешь переадресацию с любого урла на один
контролер
2) этот контролер по урлу из базы выбирает нужное правило
3) и запускает нужный контролер

... если не понятно могу код прислать

On 20 май, 15:13, Kerrygun <kerry...@gmail.com> wrote:

Alex Saveliev

unread,
May 26, 2008, 4:29:24 AM5/26/08
to codeign...@googlegroups.com

2) этот контролер по урлу из базы выбирает нужное правило
3) и запускает нужный контролер

... если не понятно могу код прислать
Если можно, пришлите.

Алексей Савельев
http://hpsy.ru

tristan

unread,
May 28, 2008, 11:17:37 AM5/28/08
to СodeIgniter-ru
1) routes.php
переадресуем все запросы на controllers/main.php

$route['default_controller'] = "main";
$route['scaffolding_trigger'] = "";

2)
controllers/main.php

<?php
class Main extends Controller {

function index() {
$this->load->model('m_main');

$url = $this->uri->uri_string();
$result = $this->m_main->router($url);

//получили имя нужного нам контроллера
$controller = $result->controller;
//получили имя нужного нам вьюшки
$view = $result->view;

require_once($controller); //загрузили нужный нам контроллер
$data = ... вызываем функцию в этом контроллере,понятно
что она должна быть в каждом контроллере

$this->load->view($view, $data);
}
}



models/m_main.php
<?
class m_main extends Model {

function __construct() {
parent::Model();
}

function router($url) {
$sql = "
SELECT *
FROM `router`
WHERE `url` = `$url`
";
$query = $this->db->query($sql)->row();
return $query;
}
}

?>

Mityok

unread,
Jun 12, 2008, 8:44:42 PM6/12/08
to СodeIgniter-ru
Строка
$route['default_controller'] = "main";
переадресует на контроллер "main" не все запросы, а запросы без
указания адреса ресурса (т.е. запросы к "корню" приложения).
Чтобы направить все запросы на конкретный контроллер, нужно задать:
$route['.*'] = "main";
или
$route[':any'] = "main";
Reply all
Reply to author
Forward
0 new messages