CodeIgniter:从DB中提取的Constants.php常量

时间:2012-04-08 04:26:24

标签: codeigniter routes

我的控制器squad管理CMS较大社区内部组的所有功能。我想为管理员提供更改引用该组的动词的能力。这样的示例可以是:teamwingplatoon,如果满足它们,甚至是dogfood

我遇到的问题是需要从数据库字符串中提取路由,以便site.com/squad成为管理员设置的值。然而。如果没有a)破解核心或b)扩展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"; 

有人有办法解决这个问题吗?

2 个答案:

答案 0 :(得分:1)

我通常这样做的方法是在字符串前加一个字符串(例如:squad_),然后在routes.php中匹配一个正则表达式

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

或者更清洁,添加另一个“级别”,然后您可以通过$route['s/(:any)']

在routes.php中匹配
site.com/s/team
site.com/s/squad
site.com/s/food

话虽如此,我不确定你为什么

  

需要重写小队控制器的名字

答案 1 :(得分:1)

我的朋友找到this article,解决方案完美无缺。当然,它需要另一个数据库请求,但这是要支付的价格。

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";