【问题标题】:Codeigniter 4th level route not workingCodeigniter 4级路由不起作用
【发布时间】:2016-04-22 22:40:15
【问题描述】:

routes.php

$route['admin/news'] = 'admin_news/index'; //在职的 $route['admin/news/(:any)'] = 'admin_news/view/$1'; //在职的 $route['admin/news/create'] = 'admin_news/create'; //在职的 $route['admin/news/edit/(:any)'] = 'admin_news/edit/$1'; //不工作 $route['admin/news/delete/(:any)'] = 'admin_news/delete/$1'; //不工作

控制器:admin_news.php

if (!defined('BASEPATH')) exit('不允许直接访问脚本'); 类 Admin_news 扩展 CI_Controller { 公共函数 __construct() { 父::__construct(); $this->load->model('news_model'); $this->load->helper('url'); if(!$this->session->userdata('is_logged_in')){ 重定向('管理员/登录'); } } 公共函数索引() { $data['news'] = $this->news_model->get_news(); $data['title'] = '新闻存档'; $this->load->view('admin/includes/header', $data); $this->load->view('admin/news/index', $data); $this->load->view('admin/includes/footer'); } 公共函数视图($slug = NULL) { $data['news_item'] = $this->news_model->get_news($slug); 如果 (空($data['news_item'])) { 显示_404(); } $data['title'] = $data['news_item']['title']; //$this->load->view('templates/header', $data); $this->load->view('admin/news/view', $data); //$this->load->view('templates/footer'); } 公共函数创建() { $this->load->helper('form'); $this->load->library('form_validation'); $data['title'] = '创建一条新闻'; $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('admin/includes/header', $data); $this->load->view('admin/news/create', $data); $this->load->view('admin/includes/footer'); } 别的 { $this->news_model->set_news(); $this->load->helper('url'); $this->index(); } } 公共功能编辑($slug) { $data['news_item'] = $this->news_model->get_news($slug); 如果 (空($data['news_item'])) { 显示_404(); } $data['title'] = '编辑:'.$data['news_item']['title']; $this->load->helper('form'); $this->load->library('form_validation'); $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('admin/includes/header', $data); $this->load->view('admin/news/edit', $data); $this->load->view('admin/includes/footer'); } 别的 { $this->news_model->update_news( $this->input->post('id'), $this->input->post('title'), $this->input->post('text')); $data['news_item'] = $this->news_model->get_news($slug); $this->load->view('admin/includes/header', $data); $this->load->view('admin/news/success'); $this->load->view('admin/news/edit', $data); $this->load->view('admin/includes/footer'); } } 公共函数删除($id = NULL){ $this->news_model->delete_news($id); $this->load->helper('url'); $this->index(); } }

模型:News_model.php

类 News_model 扩展 CI_Model { 公共函数 __construct() { $this->load->database(); } 公共函数 get_news($slug = FALSE) { if ($slug === FALSE) { $query = $this->db->get('news'); 返回 $query->result_array(); } $query = $this->db->get_where('news', array('slug' => $slug)); 返回 $query->row_array(); } 公共函数 set_news() { $this->load->helper('url'); $slug = url_title($this->input->post('title'), 'dash', TRUE); $数据 = 数组( 'title' => $this->input->post('title'), '蛞蝓' => $蛞蝓, 'text' => $this->input->post('text') ); 返回 $this->db->insert('news', $data); } /*公共函数 update_news($slug = FALSE) { $this->load->helper('url'); $slug = url_title($this->input->post('title'),'dash',TRUE); $数据 = 数组( '蛞蝓' => $蛞蝓, 'title' => $this->input->post('title'), 'text' => $this->input->post('text') ); $this->db->where('slug', $slug); 返回 $this->db->update('news', $data); }*/ 公共函数 update_news($id, $title, $text) { $数据 = 数组( '标题' => $标题, '文本' => $文本 ); $this->db->where('id', $id); $this->db->update('news', $data); } 公共函数 delete_news($id = FALSE) { $this->db->delete('news', array('id' => $id)); } }

浏览量:admin/news/edit.php

编辑新闻项目

标题

文本

当我访问
`http://localhost/ciadmin/admin/news/edit/news-slug`
显示 404 Page Not Found 消息!

【问题讨论】:

  • 404 可能有很多不同的东西。首先尝试直接从您的 news/edit/ 方法中回显一些简单的内容,以查看路由是否正常工作。如果路由正常,则编辑方法中存在错误。
  • 嗨,这个简单的方法效果很好,但是现在我将相同的脚本移动到管理目录它会显示错误!
  • 在您的路线上,您是否将 $route['translate_uri_dashes'] = FALSE; 更改为 TRUE

标签: php codeigniter


【解决方案1】:

这样说:

$route['admin/news/delete/(:any)'] = 'admin_news/delete/$1';
$route['admin/news/edit/(:any)'] = 'admin_news/edit/$1';
$route['admin/news/create'] = 'admin_news/create';
$route['admin/news/(:any)'] = 'admin_news/view/$1';
$route['admin/news'] = 'admin_news/index';

记住:

路由将按照它们定义的顺序运行。较高的路线总是优先于较低的路线。

Docs.

【讨论】:

    【解决方案2】:

    因为每个请求都重定向到$route['admin/news/(:any)']。 示例:https://example.com/admin/news/edit/1。您必须更改路线的顺序如下 $route['admin/news/delete/(:any)'] = 'admin_news/delete/$1'; $route['admin/news/edit/(:any)'] = 'admin_news/edit/$1'; $route['admin/news/create'] = 'admin_news/create'; $route['admin/news/(:any)'] = 'admin_news/view/$1'; $route['admin/news'] = 'admin_news/index';

    【讨论】:

      【解决方案3】:

      我对 4.0.4 也有一些问题,我对此感到困惑。
      在刚刚定义的ci4中

      myController extends BaseController
      

      然后在routes.php中

      $routes->get('/', 'myController::index');
      

      查看更多https://codeigniter4.github.io/userguide/incoming/routing.html

      【讨论】:

        猜你喜欢
        • 2011-11-07
        • 2018-06-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多