【问题标题】:Codeigniter routing with slug gives me 404带有 slug 的 Codeigniter 路由给了我 404
【发布时间】:2014-07-23 12:12:04
【问题描述】:

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

我遇到的问题是一切正常,但是当基于 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

非常感谢和道歉,如果这可能是在其他帖子上以不同的格式和不同的意图提出的。

【问题讨论】:

  • $route['news/(:any)'] = 'news/singe_news/$1'; 更改为 $route['news/(:any)'] = 'news/single_news/$1';

标签: php codeigniter slug


【解决方案1】:

$slug 是从哪里来的?

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

有什么遗漏吗?

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

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

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

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

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

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

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

  2. 检查配置中的 uri_protocol 设置

  3. 尝试这样的路由 $route['news/((.+)$)?'] = "news/singe_news/$1"; (这应该取代两条新闻路线)

【讨论】:

  • 传奇,所以解决方案是 1- 正确的路线,2- 将 $slug 传递给模型,3- 将构造函数添加到类
猜你喜欢
  • 2017-01-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-12-11
相关资源
最近更新 更多