Php 在codeigniter 2.1中的控制器类中处理段

Php 在codeigniter 2.1中的控制器类中处理段,php,codeigniter-2,Php,Codeigniter 2,我被困在codeigniter的片段中,因为它对我来说是新的, 我的登录表单出现问题 我给出了url,比如action=“blog/login/getLog”和 我的登录表单显示在url中,如blog/login 我知道,在控制器类中,我只创建了一个名为login的函数,但我创建的控制器文件如下: class Blog extends CI_Controller{ function __construct(){ parent::__construct(); } // Now See f

我被困在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
但是现在我不知道如何处理这两个部分,比如
login
login/getLog

编辑:具体发生了什么,当我点击登录按钮时,我只看到登录表单符合
\u remap()
和类似
blog/login
的url,当我提交表单和类似
blog/login/getLog
的url时,登录表单仍在查看,但成功后我想重定向它。。或者,如果可能,在
案例“login”中检测段
getLog
如果可能


高级感谢。

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

$var = $this->uri->segment(3);
如果以表单形式发送,请通过表单发送变量。也许是一个隐藏的领域

$var = $this->input->post('var_name');
编辑:我不太清楚为什么要使用_remap进行此w/o路由到另一个函数(您只是尝试调用视图文件)

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

<?php echo form_open('blog/login');?>
<input type="hidden" name="getLog" value"true" />
<input type="submit" value="Login" />
</form>
编辑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');
}
如果您尚未通过htaccess从url中删除index.php,请添加
index.php


编辑:

根据你的问题,

但现在我不知道如何处理login和login/getLog这两个段

你就是这样处理的

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

public function _remap($method, $params = array())
{
   // all other segments will be in $paramas array
}

到底出了什么问题?您是否收到登录案例?您的意思是在同一登录页面上说登录表单操作??如果我使用
$this->login()
而不是
$this->load->view('login')
中的
案例'login':
?我可以使用上述方法??您需要使用
\u remap
中的方法。表示
$this->login()
或任何其他函数。这不会解决问题,因为他在路由时没有在_remap中放置任何方法。这就是为什么我说我不确定他为什么尝试使用remap。他可以改为使用函数登录,但添加了编辑以显示如何使用重新映射。@MikeCruz13请不要介意,但这是我在codeigniter中的第一个站点,我说我是codeigniter的新手,我使用了
\u remap()
因为每次都要从页眉和页脚视图中删除:)如果你真的不想重写$this->load->调用两次,你可以创建一个函数index()并调用它。比如博客/索引/登录。您可以将其命名为其他名称,但index有一个好处,即当控制器后面没有其他内容时,它会自动被调用。i、 e.www.example.com/blog在index中,使用uri->segment类调用,如我上面所示。@MikeCruz13由于很多繁忙的计划尚未实施,本周日我将尝试,我知道stackoverflow的规则。我会回来告诉你所有的事情,不管它是否有效,这就是为什么我没有标记它已解决。。
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
action = "<?php echo base_url('blog/login');?>"
public function _remap($method, $params = array())
{
   // all other segments will be in $paramas array
}