[英]Create dynamic page with php
我正在為項目編寫小型路由系統。 這不是完美的,它是一個自定義解決方案,如果用戶要求,它將URL映射到其模板。 我想根據用戶為數據庫中插入的每個事件的唯一ID生成一個動態頁面。 因此,如果用戶請求事件1234,它將在URL https://mysitedomain.com/event/1234
獲得一個包含事件詳細信息的頁面。 我需要了解如何使用我的代碼來實現此目的,我使用前端控制器和Red bean作為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();
}
}
}
?>
從頭開始編寫路由器有點復雜,您必須使用正則表達式進行大量操作以適應請求的url的各種情況,並且路由器應處理HTTP方法,例如POST,GET,DELETE,PUT和PATCH。
您可能要使用易於使用的現有庫,例如Fast Route ,它的簡單性可以讓您了解如何創建它。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.