2009-12-18 104 views
4

我有一个控制器,它有几个方法应该都共享公共信息。比方说,我的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
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)否则你可以在数据库中存储更大的数据blob文档如何做到这一点)

参见:http://codeigniter.com/user_guide/libraries/sessions.html

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

下面是一些会话练习:

+0

'$ this-> uri-> segment()'是一样好,它得到 –

0

如果这不能从CodeIgniters Hook mechanism解决,您可以重写控制器中的构造函数方法并调用您自己的方法。从their SVN repository来看你可能会做一些这样

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语法。呃:(

+0

好问题越来越'id'发挥作用:我知道如何得到它内部方法但不在构造函数中。顺便说一下,您也可以使用codeigniter使用PHP5语法。 –

+0

如果CI的获取id的方法尚未在构造函数中使用,仍然可以从$ _SERVER superglobal中的Request-URI解析它。 – Gordon

+0

是的我想我可以做到这一点,我正在寻找一个比手动解析$ _SERVER ['REQUEST_URI']更干净的解决方案。毕竟这是一个框架应该做的。 –

-2

根据您的网址结构,以及codeignitor使用MVC模式的事实,我假设您使用mod_rewrite将url路径格式化为index.php的查询字符串。如果这是情况下,“ID”的值应该可以在$ _REQUEST [“身份证”]在脚本执行任何一点......

+0

不,这不是它的工作原理。 –

+0

对不起,不熟悉codeignitor,只是基于它将使用mod_rewrite的所有结构假设。但你知道他们说什么假设.... – eCaroth

相关问题