Codeigniter 3路线不工作

时间:2017-03-09 17:09:48

标签: php codeigniter routes mamp

我正在建立一个CodeIgniter项目,到目前为止一切都进展顺利。我的所有路由和控制器都正常工作,除了一个。虽然我是CodeIgniter的新手,但我已经用PHP编程了将近五年,所以我有一些经验。如果有人可以看看下面的代码示例,让我知道我做错了什么,那就太好了。

显然,应用程序确实识别了路由,但它一直在抱怨它无法找到URI。

控制器:

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

class Profile extends CI_Controller {
    function __construct() {
        parent::__construct();

        $this->load->helper('url');
    }

    public function Profile($page = 'profile-page')
    {
        if ( ! file_exists(APPPATH.'/views/'.$page.'.php'))
        {
            // Load error page
            show_404();
        }

        // Capitalize the first letter
        $data['title'] = ucfirst($page);
        $data['pageType'] = "profile-page";

        // Load pages
        $this->load->view('templates/header', $data);
        $this->load->view('templates/topbar', $data);
        $this->load->view('profile');
        $this->load->view('templates/footer', $data);
        //
    }
}

接下来是我的路线:

$route['default_controller'] = 'home/home';
$route['404_override'] = '';
$route['translate_uri_dashes'] = FALSE;

// All custom routes go below this line.

$route['contact'] = 'pages/contact';
$route['signup'] = 'auth/signup';
$route['login'] = 'auth/login';
$route['profile'] = 'profile/profile';

我已经验证所有视图文件都在正确的文件夹中,并且没有拼写错误。但是,配置文件路由仍然失败。除了Profile路由之外,所有其他路由都能正常工作。

我在Windows 10上使用XAMMP,使用MAMP的Mac OS X Sierra和使用Apache / PHP / MySQL的CentOS 7进行了尝试。

感谢。

4 个答案:

答案 0 :(得分:1)

问题是你的代码进入了这个状态&amp;它无法在该路径中找到profile-page.php文件并显示错误。由于我检查了配置文件功能正常调用没有任何问题

if ( ! file_exists(APPPATH.'/views/'.$page.'.php'))
        {
            echo "test";die;
            // Load error page
            show_404();
        }

答案 1 :(得分:0)

自从我编写CodeIgniter路由以来已经有一段时间了,但我似乎记得方法名称区分大小写,因此具有大写字母'P'的Profile可能会导致问题?

我通常要调试的方法是尝试重命名方法,重命名控制器;您可以想出问题是否在路由中,或者代码中是否存在一些看不见的拼写错误或其他问题,或者路由本身是否存在

不确定这是否有帮助?祝你解决好运!

答案 2 :(得分:0)

Mac OSX区分大小写,请确保控制器中的文件名与您尝试在路径中访问的案例相匹配。如果您也发布输出也会有所帮助。我有一个类似的问题,我通过根据定义的路由重命名我的文件名解决了这个问题。请参考我的回答 HMVC codeigniter works on local server but not on web server 这里。

答案 3 :(得分:0)

在默认控制器中,如果使用CI 3,则不能使用子文件夹,除非您修改了MY_Router.php

在application / core / MY_Router.php

这是原始问题here

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