CodeIgniter: константа Константы.php вытащили из БД

0 codezyne [2012-04-08 07:26:00]

Моя squad контроллера управляет всеми функциональными возможностями внутренней группы в более крупном сообществе CMS. Я хотел бы предложить администратору возможность изменять глагол, относящийся к этой группе. Примерами таких могут быть: team, wing, platoon или даже dogfood если она их удовлетворяет.

Проблема, с которой я сталкиваюсь, должна вытащить маршрутизацию из строки базы данных, поэтому site.com/squad становится значением, которое устанавливает администратор. Однако. нельзя сделать это без а) взлома ядра или б) расширения CI_Router.

Я начал расширение, но только получил это:

class MY_Router extends CI_Router {
    function MY_Router()
    {
        $this->config =& get_config();
        parent::__construct();
    }
}  

Все, что я хотел бы сделать, это:

define('UNIT', $this->get_setting('squad-term'));
$route[UNIT] = "squad"; 

У кого-нибудь есть подход к этому?

codeigniter routes


2 ответа


1 Решение codezyne [2012-04-09 19:50:00]

Мой друг нашел эту статью, и решение работает отлично. Конечно, требуется другой запрос db, но это цена, которую нужно заплатить.

config/routes.php

require_once( BASEPATH .'database/DB'. EXT );
$db =& DB();
$query = $db->where('setting_slug', 'squad-term')->get( '_settings' );
$result = $query->result();
$term = lcfirst($result[0]->setting_value);

$route[$term] = "squad";
$route[$term . 's'] = "squads";

1 stef [2012-04-08 20:45:00]

Обычно я делаю это, чтобы добавить в сегмент строку (например: squad_), которую вы можете сопоставить с регулярным выражением в route.php

site.com/squad_team
site.com/squad_squad
site.com/squad_dogfood

Или немного чище, добавьте еще один "уровень", который затем можно сопоставить в route.php через $route['s/(:any)']

site.com/s/team
site.com/s/squad
site.com/s/food

Сказав это, я не уверен, почему вы

необходимо переписать имя контроллера команды

?