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.php
、templates/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 站点仅显示一个包含的视图的主要内容,如果未能解决你的问题,请参考以下文章