php 如何在CodeIgniter 4中实现从数据库的动态路由

wljmcqd8  于 2023-05-27  发布在  PHP
关注(0)|答案(3)|浏览(127)

正如我所提到的,你可以帮助我在CodeIgniter 4中从数据库实现动态路由吗?我实现了一个博客,所有博客文章都存储在posts表中。表中有slug列,用于获取博客。
网站页面将看起来像:
www.mysite.com/how-to-work-with-ci
www.mysite.com/your-health-your-wealth
因为,我们已经在Codeigniter 3中实现了这些功能,但我在CI4中没有找到任何等效的功能。
请在这方面帮助我。请让我知道,如果你想从我这里得到任何其他关于这方面的信息,谢谢...

ldioqlga

ldioqlga1#

其实很简单首先,您需要在路由文件中配置路由,如下所示:

$routes->get('blogs/(:any)', 'BlogController::show/$1');

这里(:any)是动态路由的占位符(slug),它将被传递到您的控制器。
在你的BlogController中,你需要获取传递给这个参数的值。

show($slug){
... switch($slug)
}

您还可以参考以下内容,以了解CI4中更好的路由。
https://codeigniter.com/user_guide/incoming/routing.html

wlp8pajw

wlp8pajw2#

试试这个:

// app\Config\Routes.php

$routes->get('/', 'Home::index');
$routes->addPlaceholder('admin', 'admin');
$routes->addPlaceholder('pub', '[a-z]+');

$routes->get('(:admin)', 'Home::$1');
$routes->get('(:admin)/(:any)', 'Home::$1/$2'); // remember $1 = admin

$routes->get('(:pub)', 'Home::index/$1'); // you can use (:any)
// app\Controllers\Home.php

<?php

namespace App\Controllers;

class Home extends BaseController
{
    public function index($slug = 'home')
    {
        echo 'INDEX: ' . $slug;
    }

    public function admin($page = 'main admin')
    {
        echo 'ADMIN: ' . $page;
    }
}
jqjz2hbq

jqjz2hbq3#

试试这个

//app\Config\Routes.php
namespace Config;
$this->db = \Config\Database::connect();
$query= $this->db->table($table); // routes table or slug name table
$query->select($field); 
$res = $query->get();
$result= $res->getResultArray();
foreach( $result as $row){
  $route->get[$row['slug_name']]                = $row['controller_name'];
  $route->get[$row['slug_name'].'/:any' ]       =$row['controller_name'];
}

相关问题