Codeigniter站点仅显示一个包含的视图

时间:2015-09-11 17:50:53

标签: php linux windows codeigniter xampp

我刚刚将我的codeigniter网站上传到了实时服务器,然后我不得不处理一些弹出的错误。我现在遇到的问题很奇怪。我的主要" Page" controller将多个视图一起编译以构建页面。例如,我通过我的控制器将页眉,导航栏,内容和页脚添加到页面,但只有内容视图才能通过。这是在页面控制器中构建我的页面的主要功能:

public function view($page = 'home')
    {

        if (!file_exists(APPPATH . '/views/pages/' . $page . '.php')) {
            // If the page does not exist
            show_404();
        }

        $data['title'] = ucfirst($page); // Capitalize the first letter of title

        $this->load->view('templates/header', $data); // Load the Header
        $this->load->view('templates/navbar', $data); // Load the Navbar
        $this->load->view('pages/' . $page); // Load the defined page
        $this->load->view('templates/footer'); // Load the footer
    }

我上传的服务器是Linux服务器,具有非常高的区分大小写。我不得不将我的控制器从page.php重命名为Page.php,只是为了codeigniter找到我试图构建的视图。虽然我的缺席视图"错误已经解决,只有我的页面通过我的控制器,而不是模板文件夹中的文件。

该网站在我的Windows Xampp服务器上工作正常,但不适用于此在线环境。我检查了所有已编辑的文件是否存在大写/大写问题,但找不到任何问题。据我所知,codeigniter文件本身应该支持linux和windows。有谁知道我做错了什么?我对codeigniter很新。

2 个答案:

答案 0 :(得分:0)

如前所述,Linux区分大小写,但这不会导致您的问题。

您是否尝试动态嵌入页面? 如果是这样,那么你可以尝试这种方法。将页面作为变量传递。 我会构建一个主模板而不是您当前的方法,因为它会使嵌入更容易。

控制器

function view(){
    $this->load->view('pages', array(
        'page_view' => $page
    ));
}

Pages.php

<?php echo $page_view; ?>

答案 1 :(得分:0)

暂时将以下内容添加到index.php文件的顶部,以确保显示所有错误。 请务必在上线时将其删除!

error_reporting(E_ALL);
ini_set('display_errors', 1);

通常我在Ubuntu中进行文件命名时会做以下事情。

  • 我的所有文件名都是小写的,如page.phptemplates/header.php等等......

  • 类名如下:class Page {}

  • 我总是在我的代码中以小写引用我的类,库,视图和任何模块,例如:

    # file: application/models/my_model.php
    class My_model extends CI_Model {}
    
    # file: application/controllers/page.php
    
    # loaded this way:
    $this->load->model('my_model');
    
    # and used this way:
    $this->my_model->some_model_function();
    

对于数据库错误,请检查新服务器mysql用户配置。并且您可能会收到headers are already sent错误,因为在代码中出现session_start()之前发生了错误,这意味着错误被回显,并且在第一个echo语句之前发送了标头,无法开始会话。如果你修复了相应的错误,这就消失了。