Маршрутизация слаг или URL из базы в Codeigniter - PullRequest
0 голосов
/ 04 сентября 2018

У меня есть несколько контроллеров: почта, страницы, авторы. На каждом контроллере я хочу установить отдельный URL из базы данных. Структура страницы базы данных: в базе данных будут тысячи записей.

enter image description here Как это можно реализовать, также укажите, что каждый URL будет загружаться из базы данных на основе slug. Я застрял в этом в последние два дня

Текущая структура URL -

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

Я хочу что-то вроде URL

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

Ответы [ 2 ]

0 голосов
/ 05 сентября 2018

Пожалуйста, проверьте следующий код, поместив его внизу файла config / rout.php.

Что он делает, проверьте, присутствует ли 'blog-post-' в части uri (не в строке запроса). Если присутствует, то взорвите его и проверьте, является ли вторая часть действительным положительным целым числом. Если да, то установите правило маршрута для 'post / post_details / {NUMBER}' для URI.

Он не нарушает правила маршрутов для других контроллеров (Страницы, Авторы), пытаясь перенаправить их попадания на контроллер 'post'.

$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;
    }
}
0 голосов
/ 04 сентября 2018

Поскольку в вашей базе данных уже есть слизни, я предполагаю, что у вас уже есть 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';
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...