使用slug的Codeigniter路由给我404

时间:2014-06-03 08:26:35

标签: php codeigniter slug

我正在开发一个客户端网站,其中一部分用于检索新闻,这是我的第一个codeigniter应用程序,我已经遵循了CI教程,slu and和路由。

我遇到的问题是一切正常但是当得到基于slug的记录时我得到404.我所做的是从我的URL中删除index.php并测试它,这很好。

这是我的route.php

$route['default_controller'] = "welcome";
$route['404_override'] = '';

$route['news/(:any)'] = 'news/singe_news/$1';
$route['news'] = 'news';

这是我的模型news_model.php

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

class News_model extends CI_Model {


    function get_all(){

    $sql="SELECT * FROM news AS news";  
    $query=$this->db->query($sql);
    return $query->result();

    }

    //// get a single post

    function get_single($slug = FALSE) {

    if ($slug === FALSE)
        {
        $query = $this->db->get('news');
            return $query->result_array();
        }

    $query = $this->db->get_where('news', array('slug' => $slug));
    return $query->row_array();


    }


    function news_categories(){

     $sql="SELECT * FROM news_categories";  
     $query=$this->db->query($sql);
     return $query->result();

    }

}

这是我的控制器news.php

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

class News extends CI_Controller {



    public function index()
    {
        $this->load->model('news_model');
        $data['results']=$this->news_model->get_all();
        $this->load->view('public/header', $data);
        $this->load->view('public/menu');
        $this->load->view('public/news-listing', $data);
        $this->load->view('public/footer', $data);
    }



    public function single_news($slug) {


        $this->load->model('news_model');
        $data['single_news'] = $this->news_model->get_single();

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

        $this->load->view('public/header');
        $this->load->view('public/menu');
        $this->load->view('public/single-news', $data);
        $this->load->view('public/footer'); 


    }

}

我有问题:

1- $ slug来自哪里?我有一个观点

2-有什么遗漏?

网址必须

domain.com/news/this-is-a-slug

非常感谢和道歉,如果可能以不同的格式询问其他帖子的意图不同。

1 个答案:

答案 0 :(得分:1)

$ slug来自哪里?

您的URI如下所示:www.example.com/controller/method/arg1/arg2/arg3(没有查询字符串)

有什么遗漏吗?

嗯,你应该做的事情很少:

  1. 使用autoload(config / autoload.php)加载最常用的模型,或者如果不广泛使用此模型,至少在类构造函数中加载它。

  2. 您没有将$ slug参数传递给模型方法,即使您修复路由,这也不会有效。

    $data['single_news'] = $this->news_model->get_single();

  3. 如果您找不到slug,最好显示404,不要在失败时重新获取所有数据。

  4. 要修复404错误,请按以下步骤操作:

    1. 检查.htaccess文件是否有错误

    2. 检查配置

    3. 中的uri_protocol设置
    4. 尝试像这样的路由[&#39; news /(((+)$)?'] =&#34; news / singe_news / $ 1&#34 ;; (这应该取代两条新闻路线)