【问题标题】:Create dynamic page with php用php创建动态页面
【发布时间】:2019-11-07 13:24:19
【问题描述】:

我正在为一个项目编写一个小型路由系统。它并不完美,它是一个自定义解决方案,如果用户提出请求,它会将 url 映射到他们的模板。我想为从用户插入数据库中的每个事件生成一个基于唯一 id 的动态页面。因此,如果用户请求事件 1234,它将在 url https://mysitedomain.com/event/1234 处获得一个包含事件详细信息的页面。我需要了解如何使用我的代码来实现这一点,我使用前端控制器和红豆作为 ORM 来访问数据库。 这是我的路由器的代码。任何建议将不胜感激。目前我只能提供模板。

<?php
namespace Router;

define('TEMPLATE_PATH', dirname(__DIR__, 2).'/assets/templates/');

class Route {

  private static $assets = ['bootstrap' => 'assets/css/bootstrap.min.css',
    'jquery' => 'assets/js/jquery.min.js',
    'bootstrapjs' => 'assets/js/bootstrap.min.js',
  ];

    public static function init()
    {
      if( isset($_SERVER['REQUEST_URI']) ){
        $requested_uri = parse_url( $_SERVER['REQUEST_URI'], PHP_URL_PATH);
          if( $requested_uri === '/' ){
            echo self::serveTemplate('index', self::$assets);
          }
          elseif( $requested_uri != '/' ){
            $requested_uri = explode('/', $_SERVER['REQUEST_URI']);
            if( $requested_uri[1] === 'event' ){
              echo self::serveTemplate('event', self::$assets, ['event_id' => 001] );
            }
            else{
              echo self::serveTemplate($view, self::$assets);
            }
          }
      }
    }

    private static function serveTemplate(string $template, array $data, array $event_id = null)
    {
      if( !is_null($event_id) ){
        $data[] = $event_id;
        ob_start();
        extract($data);
        require_once TEMPLATE_PATH."$template.php";
        return ob_get_clean();
      }
      else{
        ob_start();
        extract($data);
        require_once TEMPLATE_PATH."$template.php";
        return ob_get_clean();
      }
    }

}

?>

【问题讨论】:

    标签: php url-rewriting url-routing


    【解决方案1】:

    从头开始编写路由器有点复杂,您必须使用regular expression 来适应各种请求 url 的场景,并且您的路由器应该处理 HTTP 方法,如 POST、GET、DELETE、PUT 和 PATCH。

    您可能想要使用现有的库,例如 Fast Route,易于使用且简单性可以让您了解它是如何创建的。

    【讨论】:

    • 我正在努力学习更多关于应用于 PHP 的 MVC 模式。我知道快速路线,它与我正在研究的概念相同吗?
    猜你喜欢
    • 1970-01-01
    • 2019-06-20
    • 1970-01-01
    • 2011-03-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-29
    相关资源
    最近更新 更多