Codeigniter:来自DB表的/application/config/constant.php中的常量

时间:2012-07-12 07:10:17

标签: codeigniter

是否可以从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'] );
}

但是现在我必须在我创建的每个控制器中执行此操作,因此复制代码并要求在需要时进行全部更改,这似乎是不必要的!

3 个答案:

答案 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)

使用hooksMY_Controller来解决此问题。或者如果你很懒,你可以自动加载一个帮助你的帮助。

然后将在每次通话中定义。