是否可以从DB表中声明/application/config/constant.php中的常量?
我正在尝试这样做。
$result = $this->db->select( 'attr, value' )->from( 'app_conf')->where( 'city', 53 )->or_where( 'city', -1 )->order_by( 'city' )->get();
$app_conf = $result->result_array();
// var_dump( $app_conf );
foreach( $app_conf as $row )
{
define( "_{$row['attr']}", $row['value'] );
}
但是现在我必须在我创建的每个控制器中执行此操作,因此复制代码并要求在需要时进行全部更改,这似乎是不必要的!
答案 0 :(得分:4)
扩展CI控制器并将其作为MY_Controller放在application / core目录中。在扩展控制器的构造函数中放置上面的代码。现在,您可以从控制器扩展它以执行相同的代码。因此,您无需一次又一次地编写此代码。
答案 1 :(得分:4)
通过扩展CI_Controller
创建一个新控制器并使用此控制器作为主控制器(使用它来创建新控制器而不是CI_Controller)
<?php
class MY_Controller extends CI_Controller{
function __construct()
{
parent::__construct();
// Assuming that you have loaded all required library in autoload
$result = $this->db->select( 'attr, value' )->from( 'app_conf')->where( 'city', 53 )->or_where( 'city', -1 )->order_by( 'city' )->get();
$app_conf = $result->result_array();
foreach( $app_conf as $row )
{
define( "_{$row['attr']}", $row['value'] );
}
}
}
创建一个新控制器(来自MY_Controller而不是CI_Controller的普通控制器)
class Somecontroller extends MY_Controller {
function __construct()
{
parent::__construct();
// ...
}
// other functions/mechods
}
答案 2 :(得分:1)
使用hooks或MY_Controller来解决此问题。或者如果你很懒,你可以自动加载一个帮助你的帮助。
然后将在每次通话中定义。