2012-04-08 65 views
0

我的控制器squad管理CMS較大社區內部組的所有功能。我想讓管理員能夠更改引用該組的動詞。這樣的例子可以是:teamwing,platoon,或者甚至dogfood,如果它滿足它們的話。CodeIgniter:從DB中提取的Constants.php常量

我遇到的問題是需要從數據庫字符串中拉出路由,因此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"; 

是否有人有辦法嗎?

回答

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

不適用於ci 3.0 – 2015-07-04 10:11:42

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 

匹配routes.php文件說了這麼多,我不知道爲什麼你

需要重寫班長控制員的名字

+0

這樣做仍需要路徑搜索是動態的。讓我更加清楚。羣組操作(管理用戶,社區牆,消息,新聞等)的功能由控制器「班組」處理。由於並非每個安裝管理員都想調用其社區「班組」的分部,所以我建立了一種方法來改變動詞,即「團隊」。擁有一個負責管理你的「團隊」的管理員被稱爲「班組」是非常愚蠢的,你不覺得嗎?因此,我想根據數據庫中分配的謂詞有條件地路由控制器。 – codezyne 2012-04-08 20:07:11

相關問題