我正在开发一个客户端网站,其中一部分用于检索新闻,这是我的第一个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
非常感谢和道歉,如果可能以不同的格式询问其他帖子的意图不同。
答案 0 :(得分:1)
$ slug来自哪里?
您的URI如下所示:www.example.com/controller/method/arg1/arg2/arg3(没有查询字符串)
有什么遗漏吗?
嗯,你应该做的事情很少:
使用autoload(config / autoload.php)加载最常用的模型,或者如果不广泛使用此模型,至少在类构造函数中加载它。
您没有将$ slug参数传递给模型方法,即使您修复路由,这也不会有效。
$data['single_news'] = $this->news_model->get_single();
如果您找不到slug,最好显示404,不要在失败时重新获取所有数据。
要修复404错误,请按以下步骤操作:
检查.htaccess文件是否有错误
检查配置
尝试像这样的路由[&#39; news /(((+)$)?'] =&#34; news / singe_news / $ 1&#34 ;; (这应该取代两条新闻路线)