如何使用codeigniter 3在子文件夹中路由控制器?

时间:2016-02-25 07:06:50

标签: php codeigniter

我在控制器文件夹的子文件夹中创建了一个控制器,在子文件夹中我创建了一个登录控制器。

但是我无法访问此控制器并已在路径文件中给出规则。

结构:

Controller
--admin
   ---login.php

路线规则:

$route['default_controller'] = 'admin/login';
$route['admin_login'] = 'admin/login';

3 个答案:

答案 0 :(得分:5)

默认情况下,codeIgniter 3版本及以上版本不能在默认控制器路由中使用子文件夹。

为了能够在default_controller中使用子文件夹,您需要使用MY_Router.php

$route['default_controller'] = 'admin/login';

应用程序>

应用程序>核心>

应用程序>核心> MY_Router.php

<强> MY_Router.php

<?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.');
    }
}

另外,请确保您遵循naming文件的codeIgniter方式

文件名:Login.php

<?php 

class Login extends CI_Controller {
    public function index() {

    }
}

答案 1 :(得分:0)

路由:“admin / login”应该默认使用Codeigniter的配置。

//WRONG
$route['admin_login'] = 'admin/login'; 

//GOOD
$route['adm/log'] = 'admin/login'; 
//!!!only needed if you want to change URL path, as CI works by default that way

另外请检查一下:

  • 在login.php
  • 中正确创建了控制器类
  • 你必须在控制器类
  • 中有index()方法
  • 你的班级必须以首字母大写字母命名。 “登录”不是“登录”

Codeigniter Controllers

上的文档

答案 2 :(得分:0)

默认情况下,codeIgniter 3 及以上版本不能在默认控制器路由中使用子文件夹。

为了能够使用 default_controller 中的子文件夹,您需要使用 MY_Router.php

$route['default_controller'] = 'home';
application >

application > core >

application > core > MY_Router.php

MY_Router.php


Controller
   --Admin /// this Sub folder
   ----Home.php //for admin home
   ----login.php
   ----setting.php

   defoult folder 
   -home.php  //for frond page
   -post.php
   -cat.php
//and========== routers
$route['default_controller'] = 'home';
 /* working doun 100% */