您好我有一个codeigniter项目,我试图开始,但我有一些严重的路由问题。
我按照codeigniter官方教程制作新闻应用程序,但我宁愿让我的新闻页面静态,然后动态地在数据库上。
问题是我想将页面组织成单独的文件夹
views / pages =所有网站的基本页面 views / news =所有新闻帖子
在我的routes.php文件中我有这个
$route['(:any)'] = 'news/view/$1';
$route['(:any)'] = 'pages/view/$1';
$route['default_controller'] = 'pages/view';
我还认为id需要一个控制器来获取新闻,所以我做了这个
<?php
class News extends CI_Controller {
public function view($page = 'home')
{
if ( ! file_exists(APPPATH.'/views/news/'.$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', $data);
$this->load->view('news/'.$page, $data);
$this->load->view('templates/footer', $data);
}
}
我还在新闻文件夹中包含了一个home.php文件以查看它是否有效,但每次我尝试访问ziplinegolive.com/index.php/news/我都会收到404错误..
有谁知道我怎么能这么做?我已经搜索了ALOT的解决方案,但没有教程就像我的,没有人解释它。
答案 0 :(得分:1)
我注意到的第一个问题是您的路由:
$route['(:any)'] = 'news/view/$1';
$route['(:any)'] = 'pages/view/$1';
$route['default_controller'] = 'pages/view';
此处的第一个路由条目与第二个条目具有相同的密钥。所以,你的第一个条目被删除了。并且,密钥(:any)
将匹配任何内容,因此您的default_controller
条目(或此条目之后的任何其他条目)将永远不会被使用。
此外,我相信一般情况下,CI建议您使用更漂亮的网址,例如&#39; news / one&#39;而不是像'index.php / news / one&#39;这样的东西。如果你想映射新闻/一个&#39;对于新闻控制器的view方法,您的路由条目可能如下所示:
$route['news/(:any)'] = 'news/view/$1'
然后你的新闻控制器看起来像这样
class News extends CI_Controller
{
public function view( $page = 'home' )
{
$this->load->view('news/'.$page, $data);
}
}
最后,虽然我强烈建议您不要按照您规定的方式使用file_exists
,但定义的常量APPPATH
是相对的,而不是绝对路径,这可能会导致{{1调用。我建议使用绝对路径来确保在检查文件存在时没有路径解析问题