4

是否可以从数据库表中声明 /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'] );
}

但是现在我必须在我创建的每个控制器中都这样做,所以复制代码并要求在需要时进行更改,这似乎没有必要!

4

3 回答 3

5

扩展 CI 控制器并将其作为 MY_Controller 放置在 application/core 目录中。在扩展控制器的构造函数中放置上面的代码。现在你可以从你的控制器扩展它来执行相同的代码。因此,您无需一次又一次地编写此代码。

于 2012-07-12T07:18:23.487 回答
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
 }
于 2012-07-12T07:35:36.907 回答
2

使用钩子MY_Controller来解决这个问题。或者,如果您很懒惰,您可以自动加载一个帮手来为您执行此操作。

然后它将在每次调用中定义。

于 2012-07-12T07:18:07.900 回答