我是CI的新手,我几乎没有设法启动我自己的网站并让它运行了一段时间,我将所有的视图结构作为CI指南,但后来我想放一个名为php的文件igniel.php在名为" vcard"的文件夹中。 里面页面文件夹。
问题是,当我尝试使用如下的完整路径加载它时:
http://example.com/igniel (without the php)
它显示得很好,但是一旦我使用
<?php
class Pages extends CI_Controller {
public function view($page = 'home')
{
if ( ! file_exists(APPPATH.'/views/pages/'.$page.'.php'))
{
// Whoops, we don't have a page for that!
show_404();
}
$data['title'] = ucfirst($page); // Capitalize the first letter
$this->load->view('templates/header');
$this->load->view('templates/nav');
$this->load->view('pages/'.$page);
$this->load->view('templates/footer');
}
}
它会显示404错误。
这是我的Pages.php内容:
$route['default_controller'] = 'pages/view';
$route['(:any)'] = 'pages/view/$1/$2';
$route['404_override'] = '';
$route['translate_uri_dashes'] = FALSE;
这是我的routes.php内容:
{{1}}
我试图谷歌搜索并使用一些建议,但仍然没有运气......
提前多多感谢。最佳,
答案 0 :(得分:1)
您不会调用视图文件。相反,您应该通过控制器发出请求,该控制器旨在调用特定文件。所以你永远不想打电话(我也不确定你是如何通过该URL成功请求的):
http://example.com/application/views/pages/vcard/igniel.php
但
http://example.com/pages/view/igniel
(没有扩展名)。
您应该遵循CI文档中的基本示例。在您的情况下,这意味着您尝试在控制器中使用具有相同代码的子目录vcard,而这些代码并不适合您的需求。
class Pages extends CI_Controller
{
public function view($page = 'home')
{
if ( ! file_exists(APPPATH.'/views/pages/'.$page.'.php'))
{
// Whoops, we don't have a page for that!
show_404();
}
elseif ( $page == 'igniel' )// your page is in subdirectory
{
$data['title'] = ucfirst($page); // Capitalize the first letter
$this->load->view('templates/header');
$this->load->view('templates/nav');
$this->load->view('pages/vcard/'.$page);
$this->load->view('templates/footer');
}
else
{
$data['title'] = ucfirst($page); // Capitalize the first letter
$this->load->view('templates/header');
$this->load->view('templates/nav');
$this->load->view('pages/'.$page);
$this->load->view('templates/footer');
}
}
}
但是,如果你想把它称为:
http://example.com/igniel
您必须更改控制器中的行,以便将该文件包含在elseif
行中所述的路径中。
路由应该像:
$route['(:any)'] = 'pages/view/$1';
如果你有更多的子目录,你必须在控制器中安装代码,以满足我在这里为你描述的那些代码。