在front_end设置时找不到代码点火器MVC的404页



我已经搜索过了,但找不到任何有用的解决方案,所以我在这里发布了我的问题。我正在为我的项目使用代码点火器MVC。我已经很好地设置了后端/管理面板,但对于前端部分,当我试图在codeigniter MVC中设置前端时,我收到了"404页面未找到"错误。

我的应用程序结构是:

project_name
--application
controllers
-- admin
-- front_end
-- Front_end.php
models
-- admin
-- front_end
-- Mdl_front_end.php
views
-- admin
-- front_end
-- home.php

routes.php

$route['default_controller'] = 'front_end/front_end/index';
$route['404_override'] = '';
$route['translate_uri_dashes'] = TRUE;
$route['admin'] = 'admin/login';
$route['admin/gallery'] = 'admin/gallery/add';
$route['about'] = 'front_end/about';

core/MY_Controller.php

<?php (defined('BASEPATH')) OR exit('No direct script access allowed');
class MY_Controller extends CI_Controller {
function __construct()
{
parent::__construct();
}
}
?>

application/controllers/front_end/front_end.php

<?php
defined('BASEPATH') OR exit('No direct script access allowed');
class Front_end extends MY_Controller {
public function __construct(){
parent::__construct();
}
public function index(){
$this->load->view('front_end/home');
}
}

每当我访问根URL时,如:http://localhost/prject_name/获取"404页面未找到"错误。有人请给我指正确的方向吗?谢谢

ci3是这样设计的
您不能以嵌套的方式设置默认控制器

但如果你还想这么做的话。你可以这样做

设置$route['default_controller'] = 'home';

home.php应该在控制器/controller/home.php的根路径中并在这里包括您的控制器

<?php
defined('BASEPATH') OR exit('No direct script access allowed');
//requiring home controller
require_once APPPATH."controllers/front_end/Front_end.php";

这个问题的两个答案。

  1. 要使用CodeIgniter路由的默认设置,只使用直接位于controllers文件夹$route['default_controller'] = 'controllerName'上的控制器,使用此选项无法使用子文件夹,例如controllers/subfolder/yourcontroller.php。无法执行类似于此$route['default_controller'] = 'subfolder/yourcontroller';的操作。幸运的是,我们可以通过为controllers文件夹中的每个子文件夹创建新的路由来操作CodeIgniter,为该路径指定默认控制器。让我们在您的项目中看到这一点,您有controllers/front_end/front_end.php,所以您必须转到application/config/routes.php并添加以下行:

    $route['front_end']='front_end/front_end';

然后打开浏览器并写入http://localhost/projectname/front_end,相当于http://localhost/projectname/front_end/front_end/index.

  1. 通过用自己的类覆盖CodeIgniter路由器类,要做到这一点,请在路径application/core中添加my_router.php文件,在该文件中复制并粘贴以下代码:

class MY_Router extends CI_Router {
protected function _set_default_controller() {
if (empty($this->default_controller)) {
show_error('Unable to determine what should be displayed. A default route has not been specified in the routing file.');
}
// Is the method being specified?
if (sscanf($this->default_controller, '%[^/]/%s', $class, $method) !== 2) {
$method = 'index';
}
// This is what I added, checks if the class is a directory
if( is_dir(APPPATH.'controllers/'.$class) ) {
// Set the class as the directory
$this->set_directory($class);
// $method is the class
$class = $method;
// Re check for slash if method has been set
if (sscanf($method, '%[^/]/%s', $class, $method) !== 2) {
$method = 'index';
}
}

if ( ! file_exists(APPPATH.'controllers/'.$this->directory.ucfirst($class).'.php')) {
// This will trigger 404 later
return;
}
$this->set_class($class);
$this->set_method($method);
// Assign routed segments, index starting from 1
$this->uri->rsegments = array(
1 => $class,
2 => $method
);
log_message('debug', 'No URI present. Default controller set.');
}
}

完成后,转到你的应用程序/config/routes.php并设置你的默认控制器:

$route['default_controller'] = 'front_end/fornt_end';

然后在浏览器中键入:http://localhost/projectname,然后砰的一声,你就会得到你想要的。

相关内容

  • 没有找到相关文章