【问题标题】:Codeigniter reference MY_Controller in form helperCodeigniter 在表单助手中引用 MY_Controller
【发布时间】:2013-06-13 12:22:00
【问题描述】:

如果我在 MY_Controller 中有一个处理表单的回调函数:

class MY_Controller extends CI_Controller{

    function login(){
        $this->form_validation->set_rules('username', 'Username', 'required');
        $this->form_validation->set_rules('password', 'Password', 'required');

        if ($this->form_validation->run() == true){
            //do something
        }
    }

}

在我看来,我应该如何使用表单助手来引用它?

echo form_open('?/login');

这背后的原因是我们在一个没有相应控制器的标题模板中有一个登录表单,它在每个视图之前被加载。如果设置了会话数据,我们将使用 JS 隐藏登录表单,因此将回调放在 MY_Controller 中似乎最合乎逻辑,我只是​​不确定如何使用表单助手类访问它。有什么建议么?

【问题讨论】:

  • form_open('MY_Controller/login');
  • 你的default_controller名字是什么??

标签: php html forms codeigniter


【解决方案1】:

由于您将login() 放置在MY_Controller 内部并扩展CI_Controller,因此每个控制器都会获得该方法。然后,您可以使用$this->router->fetch_class(); 获取当前控制器的名称,并将其附加在/login 之前。

例如。

var $controller = $this->router->fetch_class();
echo form_open($controller.'/login');

【讨论】:

  • 非常好,我喜欢这个,因为使用 MY_Controller 至少可以说不是很好的宁静 uri 设计。这样一来,登录功能总是在上下文中,字面意思。
【解决方案2】:

添加两个库-

 $this->load->helper('form');
 $this->load->library('form_validation');

在你的控制器构造函数中添加这个

echo form_open('MY_Controller/login');

在视图中

【讨论】:

    【解决方案3】:

    您可以访问MY_Controllerlogin()功能

    form_open('default_controller_name/login');
    

    如果您的default_controller 中没有login() 函数

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-12-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多