【问题标题】:How to Implement Dynamic Routing from Database in CodeIgniter 4如何在 CodeIgniter 4 中从数据库中实现动态路由
【发布时间】:2022-02-02 13:59:38
【问题描述】:

正如我所提到的,能否请您帮我在 CodeIgniter 4 中从数据库中实现动态路由?我已经实现了一个博客,所有博客文章都存储在 posts 表中。该表具有用于获取博客的 slug 列。

网站页面将如下所示:

www.mysite.com/how-to-work-with-ci

www.mysite.com/your-health-your-wealth

因为,我们已经在 Codeigniter 3 中实现了这些功能,但我没有在 CI4 中找到任何等效功能。

请帮助我解决这个问题。如果您想从我这里获得任何其他信息,请告诉我,谢谢...

【问题讨论】:

    标签: php codeigniter codeigniter-4


    【解决方案1】:

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

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

    这里 (:any) 是动态路由的占位符(slug),它将传递给您的控制器。

    在您的 BlogController 中,您需要获取传递给此参数的值。

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

    您也可以参考以下CI4中更好的路线。

    https://codeigniter.com/user_guide/incoming/routing.html

    【讨论】:

    • 感谢您的回答。我想使用没有 /blog 段的 URL 结构,即 www.mysite.com/your-health-your-wealth,并且“/your-health-your-wealth”也将是动态的。那么,我将如何实现呢?
    • 虽然我没有测试过。你应该可以通过简单地使用 '(:any)' 来做到这一点
    • (:any) 绝对是一个很好的解决方案,但是如果有其他段,例如,/admin,/category,那么通过使用 (:any) 使这些页面重定向到那个 BlogController 是不合适的.
    • 是的,您也可以这样做。您也可以对路线进行分组并使用正则表达式。
    【解决方案2】:

    试试这个:

    // 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;
        }
    }
    
    

    【讨论】:

      猜你喜欢
      • 2017-08-28
      • 1970-01-01
      • 1970-01-01
      • 2015-10-17
      • 2014-06-04
      • 2023-01-29
      • 2020-07-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多