代码点火器路由帮助,404问题

时间:2014-11-13 21:36:25

标签: php routing

您好我有一个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的解决方案,但没有教程就像我的,没有人解释它。

1 个答案:

答案 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调用。我建议使用绝对路径来确保在检查文件存在时没有路径解析问题

相关问题