我使用Codeigniter 3.0。我发现无法路由到子文件夹中的文件。 之后,我在系统/核心中编辑文件route.php,如本指南所示: default controller inside subfolder codeigniter 3 not working 页面可以正确路由。 但是,我上传主机后得到错误: "无法加载请求的文件:frontend / Home.php" 我的结构:
-controllers
-frontend
Home.php
-views
- frontend
Home.php
我的路线档案:
$route['default_controller'] = 'frontend/Home';
我检查了班级的名字,大小写了第一个字符。
答案 0 :(得分:0)
CodeIgniter使用Frontend
方法查找home
控制器。你可以通过两种方式解决它。首先要在Home.php
目录中创建controllers
控制器,并使用下一个代码:
<?php defined('BASEPATH') OR exit('Restricted area!');
class Frontend extends CI_Controller
{
public function __construct()
{
parent::__construct();
}
public function index()
{
$this->home();
}
public function home()
{
redirect('frontend/home', 'refresh');
}
}
使用APPPATH.'config/routes.php'
代码
$route['default_controller'] = 'home';
第二种方法是使用自定义路由器类:
<?php
/*
* Custom router function v 0.1
*
* Add functionality : read into more than one sub-folder
*
*/
class MY_Router extends CI_Router
{
public function __construct()
{
parent::__construct();
}
public function _validate_request($segments)
{
if (file_exists(APPPATH.'controllers/'.$segments[0].EXT))
{
return $segments;
}
if (is_dir(APPPATH.'controllers/'.$segments[0]))
{
$this->set_directory($segments[0]);
$segments = array_slice($segments, 1);
/* ----------- ADDED CODE ------------ */
while(count($segments) > 0 && is_dir(APPPATH.'controllers/'.$this->directory.$segments[0]))
{
// Set the directory and remove it from the segment array
$this->set_directory($this->directory . $segments[0]);
$segments = array_slice($segments, 1);
}
/* ----------- END ------------ */
if (count($segments) > 0)
{
if ( ! file_exists(APPPATH.'controllers/'.$this->fetch_directory().$segments[0].EXT))
{
show_404($this->fetch_directory().$segments[0]);
}
}
else
{
$this->set_class($this->default_controller);
$this->set_method('index');
if ( ! file_exists(APPPATH.'controllers/'.$this->fetch_directory().$this->default_controller.EXT))
{
$this->directory = '';
return array();
}
}
return $segments;
}
show_404($segments[0]);
}
}