0

我被困在codeigniter中,因为它对我来说是新的,我的登录表单
有问题。

我在行动中给出了 url,action="blog/login/getLog"
的登录表单显示在 url 中,比如blog/login

我知道在控制器类中我只是创建了一个类似名称的函数,login但我创建了这样的控制器文件:

class Blog extends CI_Controller{
function __construct(){
    parent::__construct();
}

// Now See
function _remap( $method ){
    $this->load->view('header');

    switch( $method ){
        case 'about':
            $this->load->view('about');
            break;
        case 'login':
            $this->load->view('login');
            break;
        case 'services':
            $this->load->view('service');
            break;
    }

    $this->load->view('footer');
}
}//Close Class

但现在不知道如何处理loginlogin/getLog.

编辑:究竟发生了什么,当我点击登录按钮时,我只看到登录表单_remap()和 url blog/login,当我提交表单和 url 看起来像blog/login/getLog时,登录表单仍在寻找,但我想重定向它成功..或者getLog如果可能的话,如果可能的话想检测段case 'login':

提前致谢。

4

2 回答 2

1

如果您通过 URL 发送,只需使用 uri 类:

$var = $this->uri->segment(3);

如果您以表格形式发送,请通过表格发送变量。也许是一个隐藏的领域?

$var = $this->input->post('var_name');

编辑:我不太清楚你为什么使用 _remap 来进行这个没有路由到另一个函数的操作(你只是想调用一个视图文件)

这就是我希望看到登录表单的方式:

<?php echo form_open('blog/login');?>
<input type="hidden" name="getLog" value"true" />
<input type="submit" value="Login" />
</form>

然后在你的博客类中我宁愿放一个函数

public function login() {
    if($this->input->post('getLog') === "true") {
        //the form was submitted, let's check the login?
    }
    else {
        //probably don't need an else, but form isn't submitted
    }
}

编辑2:

万一有混淆,你真的想使用重映射。您也可以这样做以获取变量。

function _remap( $method ) {
  if ($method == ‘something’) {
     $this->something();
  } 
  else {
      $this->somethingelse();
  }
}

function something() {
  $var1 = $this->uri->segment(3);
  $var2 = $this->input->post('some_variable_name');
}
于 2012-05-17T09:13:43.203 回答
0
class Blog extends CI_Controller{
function __construct(){
    parent::__construct();
}

// Now See
function _remap( $method ){


    switch( $method ){
        case 'about':
            $this->about(); <---------- here method (Add header, content, footer inside respective functions)
            break;
        case 'login':
            $this->login(); <------- here too
            break;
        case 'services':
            $this->service(); <----- here too
            break;
    }


}
}//Close Class

您在这里所做的是,您通过_remap函数覆盖了 URI 的默认行为。

被覆盖的函数调用(通常是 URI 的第二段)将作为参数传递给 _remap() 函数:

简单地说,在大多数情况下,第 2 段将成为_remap函数中的 $method。

所以你的表单动作会变成。

action = "<?php echo base_url('blog/login');?>"

index.php如果您没有通过 htaccess 从您的 url 中删除 index.php,请添加。


编辑:

根据你的问题,

但现在不知道如何处理 login 和 login/getLog 这样的段。

这就是你的处理方式。

方法名称之后的任何额外段都作为可选的第二个参数传递给 _remap()。

public function _remap($method, $params = array())
{
   // all other segments will be in $paramas array
}
于 2012-05-17T09:28:55.073 回答