虽然我暂时可以找到解决方法,但我想知道是否有一种明显更为简单的方法。
我的目标是使用给定URI的第一段来查询DB应该运行哪个控制器。
我假设我必须使用段1中的结果控制器名称来重构URI,然后允许系统继续正常处理(因此是pre_system挂钩)。
虽然不是必需的,但我还想在同一个DB请求中保存一些其他变量,以便稍后在调用堆栈中使用,并假设这必须使用全局变量来完成?
很高兴收到任何更好的建议。
感谢。
答案 0 :(得分:4)
如果对其他人有用,这里是获得所需结果的代码。然而,这并没有考虑传递额外的变量,因为我可以没有它们。
function set_controller()
{
include_once APPPATH.'config/database.php'; //Gather the DB connection settings
$link = mysql_connect($db[$active_group]['hostname'], $db[$active_group]['username'], $db[$active_group]['password']) or die('Could not connect to server.' ); //Connect to the DB server
mysql_select_db($db[$active_group]['database'], $link) or die('Could not select database.'); //Select the DB
$URI = explode('/',key($_GET)); //Break apart the URL variable
$query = 'SELECT * FROM theDomainTable WHERE domainName = "'.$URI[1].'"'; //Query the DB with the URI segment
if($results = mysql_fetch_array(mysql_query($query))){ //Only deal with controller requests that exist in the database
$URI[1] = $results['controllerName']; //Replace the controller segment
$_GET = array(implode('/',$URI)=>NULL); //Reconstruct and replace the GET variable
}
mysql_close($link); //Close the DB link
}
答案 1 :(得分:0)
我不会使用全局变量,如果可能,我更喜欢将其存储在库中以便稍后检索。在CI的背景下,全局变量有点混乱。
虽然在pre_system
此时只加载了基准测试和钩子类。这意味着除非你能找到一种选择的方法,否则你很可能会遇到全局变量pre_controller
上的控制器,因为所有基类都已加载,您可以将数据放在更合乎逻辑的位置。