2012-01-02 168 views
3

继随着CI News TutorialCodeIgniter的路由,404错误

我只是做了新闻栏目,所以我改变了默认控制器“新闻”

$route['news/create'] = 'news/create'; 
$route['news/(:any)'] = 'news/view/$1'; 
$route['news'] = 'news'; 
$route['default_controller'] = 'news'; 

现在从生成一个404错误'查看文章'锚点。将默认值更改为:

$route['default_controller'] = 'welcome'; 

创建正确的路径。我应该如何改变路由器使用新闻?

没有自定义配置或使用.htaccess。

从config.php文件:

$config['base_url'] = 'http://frameworks:8888/ci_site_tut/'; 

$config['index_page'] = 'index.php'; 

新闻控制器:

<?php if (!defined('BASEPATH')) exit('No direct script access allowed'); 
/** 
* 
*/ 
class News extends CI_Controller { 

    public function __construct() 
    { 
     parent::__construct(); 
     $this->load->model('news_model'); 
    } 

    public function index() 
    { 
     $data['news'] = $this->news_model->get_news(); 

     $data['title'] = 'News Archive'; 

      $this->load->view('templates/header', $data); 
      $this->load->view('news/index', $data); 
      $this->load->view('templates/footer'); 


    } 


    public function view($slug) 
    { 
     $data['news_item'] = $this->news_model->get_news($slug); 

     if (empty($data['news_item'])) 
     { 
      show_404(); 
     } 

     $data['title'] = $data['news_item']['title']; 

     $this->load->view('templates/header', $data); 
     $this->load->view('news/view', $data); 
     $this->load->view('templates/footer'); 
    } 

    public function create() 
    { 
     $this->load->helper('form'); 
     $this->load->library('form_validation'); 

     $data['title'] = 'Create A News Item'; 

     $this->form_validation->set_rules('title', 'Title', 'required'); 
     $this->form_validation->set_rules('text', 'Text', 'required'); 

     if ($this->form_validation->run() === FALSE) 
     { 
       $this->load->view('templates/header', $data); 
       $this->load->view('news/create'); 
       $this->load->view('templates/footer'); 
     } else { 


      $this->news_model->set_news(); 
      $this->load->view('news/success'); 

     } 



    } 

} 

SOLUTION:

自动加载URL助手:

$autoload['helper'] = array('url'); 

级更新的路由:

$route['default_controller'] = 'news'; 
$route['404_override'] = 'errors/page_missing'; 
$route['news/create'] = 'news/create'; 
$route['news/(:any)'] = 'news/view/$1'; 
$route['news'] = 'news'; 

的意见/新闻/ index.php文件更新网址:

<p><a href="<?php echo site_url('news/' . $news_item['slug']); ?>">View Article</a></p> 
+0

你想在浏览器中使用什么网址? – Catfish 2012-01-03 17:04:47

+0

View article

。 index.php不包含在URL中。 – Wasabi 2012-01-04 17:39:54

+0

我有同样的问题....我认为这是一个错字。我把' 2013-10-15 23:50:34

回答

1

它看起来不像你在你的视图方法中的任何地方设置$ new_item ['slug']。在加载视图之前查看您的视图方法中是否存在'print_r($data['news_item'])以查看是否实际设置了slug。

如果您确定自己是,请确保url助手是自动加载的,并尝试在您的视图中使用它作为您的网址。

<a href="<?php echo site_url('news/'.$news_item['slug']); ?>">View article</a> 
+0

您的建议有效,并且也由CI站点推荐。也更新了我的路线。 – Wasabi 2012-01-05 01:27:18

0

你不需要任何的定制路线,只是一个视图控制器。将索引页设置为空白并删除基本URL。你应该只需要在你的新闻控制器中创建和查看方法。

+0

我有一个视图控制器,每个教程,自定义路由不需要,由于只有一个控制器(新闻)?谢谢回复! – Wasabi 2012-01-02 01:05:33

+0

建议仍然会返回404。 – Wasabi 2012-01-02 01:12:27

0

我也遇到了404 page not found路由错误。所以我认为我的回答会帮助遇到同样问题的一些用户。这是我的两分钱。

如果一个人完全按照​​,很可能会遇到上述问题。因为人按照本教程最有可能来自于前面的教程页面并追加新的路由配置到

$route['news/(:any)'] = 'news/view/$1'; 
$route['news'] = 'news'; 
$route['(:any)'] = 'pages/view/$1'; 
$route['default_controller'] = "pages/view"; 
$route['404_override'] = ''; 

:下面为避免你应该做的是什么错误都在顺序route configuration正是给出已经存在的让他们陷入困境的人。

而另一件事是,在News控制器的view方法,改线

$data['news'] = $this->news_model->get_news($slug); 

$data['news_item'] = $this->news_model->get_news($slug); 

他们应该强调的路由配置的顺序和删除错字在代码中。希望这可以帮助。