在CodeIgniter中,是否可以通过会话检查全局定义常量,如下面的示例所示
if($this->session->userdata("private")){
define("TAB_ACCOUNTS","accounts");
define("TAB_INVENTORY","inventory");
define("TAB_INVENTORY_PRODUCTS","inventory_products");
define("TAB_INVENTORY_VIEW","inventory_view");
define("TAB_ORDER_PRODUCTS","order_products");
define("TAB_ORDERS","orders");
define("TAB_ORDERS_VIEW","orders_view");
define("TAB_VENDORACCOUNTS","vendoraccounts");
}else{
define("TAB_ACCOUNTS","back_accounts");
define("TAB_INVENTORY","back_inventory");
define("TAB_INVENTORY_PRODUCTS","back_inventory_products");
define("TAB_INVENTORY_VIEW","back_inventory_view");
define("TAB_ORDER_PRODUCTS","back_order_products");
define("TAB_ORDERS","back_orders");
define("TAB_ORDERS_VIEW","back_orders_view");
define("TAB_VENDORACCOUNTS","back_vendoraccounts");
}
我的要求是根据会话使用表名MySQL查询...
更新:我需要在config.php或任何地方声明这些常量。我需要在整个项目中访问那些不在函数或控制器中的对象
答案 0 :(得分:2)
因为您需要启动session
并运行,最简单的解决方案是利用“ post_controller_constructor”挂钩。
在 config.php
$config['enable_hooks'] = TRUE;
文件 application / config / hooks.php
$hook['post_controller_constructor'][] = array(
'class' => '',
'function' => 'set_tab_constants',
'filename' => 'post_controller_hook.php',
'filepath' => 'hooks'
);
在文件 application / hooks / post_controller_hook.php
function set_tab_constants()
{
if(isset($_SESSION['private']))
{
define("TAB_ACCOUNTS", "accounts");
define("TAB_INVENTORY", "inventory");
define("TAB_INVENTORY_PRODUCTS", "inventory_products");
define("TAB_INVENTORY_VIEW", "inventory_view");
define("TAB_ORDER_PRODUCTS", "order_products");
define("TAB_ORDERS", "orders");
define("TAB_ORDERS_VIEW", "orders_view");
define("TAB_VENDORACCOUNTS", "vendoraccounts");
}
else
{
define("TAB_ACCOUNTS", "back_accounts");
define("TAB_INVENTORY", "back_inventory");
define("TAB_INVENTORY_PRODUCTS", "back_inventory_products");
define("TAB_INVENTORY_VIEW", "back_inventory_view");
define("TAB_ORDER_PRODUCTS", "back_order_products");
define("TAB_ORDERS", "back_orders");
define("TAB_ORDERS_VIEW", "back_orders_view");
define("TAB_VENDORACCOUNTS", "back_vendoraccounts");
}
}
直接访问超全局变量$_SESSION
避免了获取CI
实例的开销,因此session
类可用于读取userdata
。该方法无论如何都直接读取$_SESSION
变量。避免中间人,直接购买!
在PHP中,常量的范围是全局的。您可以在脚本中的任何位置访问常量,而无需考虑范围。
答案 1 :(得分:0)
据我所知,您的公共/后端表(else
块)始终以back_
为前缀,所以我建议不要使用这些常量。
相反,请在模型中使用普通表名,并创建一个方法来验证会话并返回空字符串或“ back_”字符串,然后在“ from”子句中使用此方法。
换句话说:“为什么唯一的区别是字符串前缀,为什么会有很多常量?”
此外,如果这些镜像表表示相同的记录,则请务必谨慎,例如,如果accounts
表中的记录与back_accounts
中的记录的种类/类型相同,我知道它们应该都是同一张桌子。 :-)我想您不能更改此必要条件:-)