6

我有一个控制器,它有几种方法,它们都应该共享公共信息。假设我的 URI 格式是这样的:

http://server/users/id/admin/index
http://server/users/id/admin/new
http://server/users/id/admin/list
http://server/users/id/admin/delete

我需要从数据库中检索一些信息id并让它们可用于所有方法,而不是在每个方法中写一行来调用模型。我怎样才能做到这一点?

4

3 回答 3

4
class users extends Controller {

 private $mydata = array();

 function users()
 {   
     parent::Controller();
     ....

     $this->mydata = $this->model->get_stuff($this->uri->segment(2));
 }

 function index()
 { 
     $this->mydata; //hello data!
 }

在这里,我只是对数组进行了硬编码(这可能是一个非常糟糕的主意)。不过,如果需要,您可以将数据存储在 codeigniter 会话中。Codeigniter 可以将此数据存储在 cookie 中(如果它的总大小小于 4kb),否则您可以在数据库中存储更大的数据块(请参阅有关如何执行此操作的文档)。

请参阅:http ://codeigniter.com/user_guide/libraries/sessions.html

小节:将会话数据保存到数据库

这是一些会话练习:

$this->session->set_userdata('mydata', $mydata);
....
$mydata = $this->session->userdata('mydata');
于 2009-12-18T22:45:03.770 回答
0

如果这不能从CodeIgniters Hook 机制中解决,您可以覆盖控制器中的构造方法并调用您自己的方法。从他们的 SVN 存储库来看,你可能会做类似的事情

class YourController extends Controller
{
    function YourController()
    {
        parent::Controller();
        $this->_preDispatch();
    }

    function _preDispatch()
    {
         // any code you want to run before the controller action is called
    }

可能是对 preDispatch 的调用必须在对父级的调用之前。试试看它是否有效。我不知道他们仍然使用 PHP4 语法。呃:(

于 2009-12-18T13:19:35.993 回答
-2

根据您的 url 结构以及 codeignitor 使用 MVC 模式的事实,我假设您正在使用 mod_rewrite 将 url 路径格式化为 index.php 的查询字符串。如果是这种情况,“id”的值应该在脚本执行的任何时候都可以在 $_REQUEST['id'] 处获得......

于 2009-12-18T15:22:26.777 回答