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

Posted

技术标签:

【中文标题】Codeigniter 站点仅显示一个包含的视图【英文标题】:Codeigniter site only shows one included view 【发布时间】:2015-12-08 08:43:35 【问题描述】:

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

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 很陌生。

【问题讨论】:

您是否在配置文件中编辑了您的基本 URL? $config['base_url'] = 'mydomain.nl' 应该是正确的吧? 您尝试显示的文件是否具有正确的权限?即apache可以读取文件吗? 它们是 644,我将它们切换到 755。由于这并没有解决问题,我决定允许所有文件 755 访问,但没有运气。 刚刚尝试上传到不同的虚拟主机。可悲的是,它没有帮助。 【参考方案1】:

暂时将以下内容添加到您的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 语句之前发送了标头,因此您无法启动会话。如果您修复相应的错误,这就会消失。

【讨论】:

【参考方案2】:

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

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

控制器

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

Pages.php

<?php echo $page_view; ?>

【讨论】:

以上是关于Codeigniter 站点仅显示一个包含的视图的主要内容,如果未能解决你的问题,请参考以下文章

从 codeigniter 中的视图调用模型是不是不好?

Codeigniter 站点范围的视图

PHP:在视图中显示会话变量:CodeIgniter

在 ajax 调用后加载视图,CodeIgniter

XAMPP 上的 CodeIgniter - 403/404 访问图像时出错

codeigniter 清除视图输出