正如我所提到的,你能帮助我在CodeIgniter 4中从数据库实现动态路由吗?我已经实现了一个博客,所有博客文章都存储在posts表中。该表具有slug列,该列用于获取博客。
网站页面将看起来像:
www.mysite.com/how-to-work-with-ci
www.mysite.com/your-health-your-wealth
正如,我们已经在Codeigniter 3中实现了这样的功能,但我在CI4中没有发现任何等效的功能。
请帮我处理这件事。如果你想从我这里得到任何其他信息,请告诉我,谢谢。。。
这其实很容易。首先,您需要在路由文件中配置如下路由:
$routes->get('blogs/(:any)', 'BlogController::show/$1');
这里(:any(是将传递给控制器的动态路由的占位符(段塞(。
在您的BlogController中,您需要获取传递给该参数的值。
show($slug){
... switch($slug)
}
您也可以参考以下内容,了解CI4中更好的路线。
https://codeigniter.com/user_guide/incoming/routing.html
试试这个:
// appConfigRoutes.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)
// appControllersHome.php
<?php
namespace AppControllers;
class Home extends BaseController
{
public function index($slug = 'home')
{
echo 'INDEX: ' . $slug;
}
public function admin($page = 'main admin')
{
echo 'ADMIN: ' . $page;
}
}
试试这个,
//appConfigRoutes.php
namespace Config;
$this->db = ConfigDatabase::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'];
}