'How to Implement Dynamic Routing from Database in CodeIgniter 4
As I have mentioned, may you please help me to implement dynamic routing from the database in CodeIgniter 4 ? I have implemented a blog where all blog posts store in the posts table. The table has the slug column which is used to fetch a blog.
Site pages will be look like:
www.mysite.com/how-to-work-with-ci
www.mysite.com/your-health-your-wealth
As, we have already implemented such features in Codeigniter 3, but I did not found anything equivalent in CI4.
Please help me regarding this. Please let me know if you want any other info regarding this from me, thanks...
Solution 1:[1]
It's actually quite easy. First, you will need to configure the routes as follow in routes files :
$routes->get('blogs/(:any)', 'BlogController::show/$1');
Here (:any) is a placeholder (slug) for the dynamic route which will be passed to your controller.
In your BlogController, you will need to fetch the value passed to this parameter.
show($slug){
... switch($slug)
}
You can also refer to the following for better of the routes in CI4.
Solution 2:[2]
Try this:
// 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;
}
}
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|---|
| Solution 1 | Dhaval Chheda |
| Solution 2 |
