【问题标题】:Routing slug or url from the database in Codeigniter在 Codeigniter 中从数据库中路由 slug 或 url
【发布时间】:2018-09-04 08:05:32
【问题描述】:

我有一些控制器:帖子、页面、作者。在每个控制器上,我想从数据库中设置单独的 URL。数据库页面的结构:数据库中会有上千条记录。

这如何实现,还要表明每个 URL 都将基于 slug 从数据库中加载。我从前两天就卡在这个了

当前的 Url 结构是 -

http://127.0.0.1/hmvc/post/post_details?id=1

我想要这样的网址

http://127.0.0.1/hmvc/blog-post-1

【问题讨论】:

    标签: php codeigniter codeigniter-2


    【解决方案1】:

    由于您的数据库中已经有 slug,我假设您已经完成了该表的 CRUD,并且您只想与它进行交互。

    首先你的控制器和方法:

    <?php
    defined('BASEPATH') OR exit('No direct script access allowed');
    
    class Post extends CI_Controller {
    
        public function post_details($slug)
        {
            $this->load->model('article_model', 'article');
            $this->data['article'] = $this->article->get_by_slug($slug);
        }
    
    }
    
    /* End of file post.php */
    /* Location: ./application/controllers/post.php */
    

    那么你的模型:

    <?php
    defined('BASEPATH') or exit('No direct script access allowed');
    
    class Article_model extends CI_Model
    {
    
        public function get_by_slug($slug = null)
        {
            if (is_null($slug)) {
                return array();
            }
            return $this->db->where('slug', $slug)
                ->get('posts')
                ->row();
        }
    
    }
    
    /* End of file article_model.php */
    /* Location: ./application/models/article_model.php */
    

    最后你的路线应该是这样的:

    $route['default_controller'] = 'dashboard';
    $route['404_override'] = '';
    $route['translate_uri_dashes'] = false;
    $route['(:any)'] = 'post/post_details/$1';
    

    【讨论】:

    • 你是通过 slug 找到的,但我想使用它的 id 来获取帖子,然后在上面设置 slug ......正如我已经提到的那样
    • 您还有一个 slug 库,可以在需要时设置新的 slug。 github.com/ericlbarnes/CodeIgniter-Slug-Library
    【解决方案2】:

    请检查以下代码,将其放在 config/routes.php 文件的底部。

    它的作用是检查 'blog-post-' 是否存在于 uri(不在查询字符串中)部分。如果存在,则将其分解并检查第二部分是否为有效的正整数。如果是,则为 uri 设置“post/post_details/{NUMBER}”的路由规则。

    它不会通过尝试将其点击重定向到“发布”控制器来破坏其他控制器(页面、作者)的路由规则。

    $uri = $_SERVER['REQUEST_URI'];
    $check_part = 'blog-post-';
    
    if (strpos($uri, $check_part) !== FALSE) {
        $uri_parts = explode('blog-post-', $uri);
        if (count($uri_parts) == 2) {
            $id = intval($uri_parts[1]);
            if ($id > 0) $route[ltrim($uri, '/')] = 'post/post_details/'.$id;
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-06-28
      • 2018-11-04
      • 2017-08-28
      • 1970-01-01
      • 2014-11-03
      • 2016-01-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多