为什么函数在Codeigniter默认控制器中不起作用?

时间:2012-03-02 03:07:29

标签: codeigniter

我有一个全新安装的codeigniter。我只是想在我的默认控制器中使用一个函数,如下所示:

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

class Welcome extends CI_Controller {

    public function index()
    {

        $data = array(
           'title' => 'Welcome',
           'description' => 'Welcome Page'
        );

        $this->load->view('layouts/header',$data);  
        $this->load->view('home/home');
        $this->load->view('layouts/footer',$data);
    }

    public function contact()
    {

        $data = array(
           'title' => 'Contact Us',
           'description' => 'Contact Page'
        );

        $this->load->view('layouts/header',$data);  
        $this->load->view('home/contact');
        $this->load->view('layouts/footer',$data);
    }
}

我已经使用htaccess成功删除了index.php。现在,当我访问example.com/welcome/contact时,它可以工作,但不是example.com/contact /.

为什么这样,默认情况下不使用路由?

3 个答案:

答案 0 :(得分:6)

在codeigniter中使用路由,因此您可以为每个路由器重新编写新的uri

$route['contact'] = 'welcome/contact';

并且不要忘记htaccess文件

RewriteEngine on
RewriteCond $1 !^(index\.php|resources|robots\.txt)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L,QSA]

答案 1 :(得分:4)

“默认控制器”仅在没有URL段时使用。它只调用一个方法,控制器的默认方法是index()

通常,您网址的第一部分会映射到控制器:

这会调用index控制器的contact方法:

  

http://example.com/contact

这会调用hello控制器的contact方法:

  

http://example.com/contact/hello

这将调用hello控制器的contact方法并将world作为第一个参数传递:

  

http://example.com/contact/hello/world

在用户指南中阅读所有相关信息:http://codeigniter.com/user_guide/general/urls.html

您需要一个contact控制器才能使用此网址,或者您可以使用routing

答案 2 :(得分:0)

example.com/contact/调用Contact控制器,你拥有的是Welcome控制器中的一个方法(这是你的默认控制器,如@Madmartigan解释的那样)。