我有一个全新安装的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 /.
为什么这样,默认情况下不使用路由?
答案 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解释的那样)。