Php 导致500错误的简单代码点火器控制器和型号-未显示CI错误

Php 导致500错误的简单代码点火器控制器和型号-未显示CI错误,php,codeigniter,Php,Codeigniter,我刚刚开始学习代码点火器,我几乎马上就遇到了一个问题 使用下面的代码和具有正确权限的数据库设置,我得到一个500错误(服务器错误)。CI没有抛出错误,我看不出此代码有任何错误 我正在使用最新版本的CI并测试此代码: 控制器:products.php class Products extends CI_Controller { public function index() { $this->load->model('products'); $this->loa

我刚刚开始学习代码点火器,我几乎马上就遇到了一个问题

使用下面的代码和具有正确权限的数据库设置,我得到一个500错误(服务器错误)。CI没有抛出错误,我看不出此代码有任何错误

我正在使用最新版本的CI并测试此代码:

控制器:products.php

class Products extends CI_Controller {

public function index() {
    $this->load->model('products');
    $this->load->view('products');
}
}
class Products extends CI_Model {
    function __construct() {
        parent::__construct();
    }

    function get_products() {
        $q = $this->db->get('product');
    if($q->num_rows() > 0) {
        foreach ($q->result() as $row) {
            $data[] = $row;
        }
        return $data;
    }
}
}
模型:products.php

class Products extends CI_Controller {

public function index() {
    $this->load->model('products');
    $this->load->view('products');
}
}
class Products extends CI_Model {
    function __construct() {
        parent::__construct();
    }

    function get_products() {
        $q = $this->db->get('product');
    if($q->num_rows() > 0) {
        foreach ($q->result() as $row) {
            $data[] = $row;
        }
        return $data;
    }
}
}

我已经将这些类放在它们应该位于的目录中,文件名与类同名……如果我在控制器中注释掉加载模型代码,我的视图就会显示出来。我的数据库连接是正确的,因为如果我将它们更改为不正确的内容,CI将抛出错误。模型或其加载存在某种问题。

您有冲突的类名,model和controller类都称为
产品
您有冲突的类名,model和controller类都称为
Products

一个很好的惯例是将控制器命名为ProductsController,然后离开模型产品。所以所有的控制器都是某种控制器

例如:

class ProductsController extends CI_Controller
其中文件名变为products\u controller.php

模型仍然是:

class Products extends CI_model
仍然是products.php

class Products extends CI_Controller {

public function index() {
    $this->load->model('products');
    $this->load->view('products');
}
}
class Products extends CI_Model {
    function __construct() {
        parent::__construct();
    }

    function get_products() {
        $q = $this->db->get('product');
    if($q->num_rows() > 0) {
        foreach ($q->result() as $row) {
            $data[] = $row;
        }
        return $data;
    }
}
}

现在您的代码应该可以工作了。

一个好的惯例是将控制器产品命名为controller,然后离开模型产品。所以所有的控制器都是某种控制器

例如:

class ProductsController extends CI_Controller
其中文件名变为products\u controller.php

模型仍然是:

class Products extends CI_model
仍然是products.php

class Products extends CI_Controller {

public function index() {
    $this->load->model('products');
    $this->load->view('products');
}
}
class Products extends CI_Model {
    function __construct() {
        parent::__construct();
    }

    function get_products() {
        $q = $this->db->get('product');
    if($q->num_rows() > 0) {
        foreach ($q->result() as $row) {
            $data[] = $row;
        }
        return $data;
    }
}
}
现在,您的代码应该可以工作了。

请尝试以下操作:

类产品扩展CI_控制器{

public function index() {
    $this->load->model('products_model','products');
    $this->load->view('products');
}
}
模型:products\u Model.php

class Products extends CI_Model {
                        function __construct() {
            parent::__construct();
    }

    function get_products() {
        $q = $this->db->get('product');
    if($q->num_rows() > 0) {
        foreach ($q->result() as $row) {
            $data[] = $row;
        }
        return $data;
    }
}
}
试试这个:

类产品扩展CI_控制器{

public function index() {
    $this->load->model('products_model','products');
    $this->load->view('products');
}
}
模型:products\u Model.php

class Products extends CI_Model {
                        function __construct() {
            parent::__construct();
    }

    function get_products() {
        $q = $this->db->get('product');
    if($q->num_rows() > 0) {
        foreach ($q->result() as $row) {
            $data[] = $row;
        }
        return $data;
    }
}
}

“ProductsController”在URI中没有多大用处。最佳做法是为控制器保留短名称,以消除对大量路由表的需要(为了SEO)如果你使用正确的路由,这不是问题。??你认为适当的路由是什么?你可以很容易地在Real.PHP文件中使用ReGEX或通配符来寻找*控制器。你也可以用正则表达式在HTTAccess文件中这样做。例程PHP文档在这里:例如(未测试)在您的路由$route['([a-z]+)Controller']=“$1”;“ProductsController”中类似的内容在URI中不会有多大用处。最佳做法是为控制器保留短名称,以消除对大量路由表的需要(为了SEO)如果你使用正确的路由,这不是问题。??你认为适当的路由是什么?你可以很容易地在Real.PHP文件中使用ReGEX或通配符来寻找*控制器。你也可以用正则表达式在HTTAccess文件中这样做。例程PHP文档在这里:例如(未测试)在您的路由$route['([a-z]+)Controller']=“$1”中类似于此的内容;