我的控制器squad
管理CMS较大社区内部组的所有功能。我想为管理员提供更改引用该组的动词的能力。这样的示例可以是:team
,wing
,platoon
,如果满足它们,甚至是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";
有人有办法解决这个问题吗?
答案 0 :(得分:1)
我通常这样做的方法是在字符串前加一个字符串(例如:squad_),然后在routes.php中匹配一个正则表达式
site.com/squad_team
site.com/squad_squad
site.com/squad_dogfood
或者更清洁,添加另一个“级别”,然后您可以通过$route['s/(:any)']
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";