php - 如何制作动态路由 PHP MVC
问题描述
如何为 /blog/* 创建路由,其中 * 是博客文章的 slug?
我正在从头开始制作一个 PHP MVC 框架,并且在视图中显示数据以及如何制作时遇到了麻烦,因此人们可以单击博客文章来查看它!
请查看 github:https ://github.com/fillemon10/cinemania-mvc了解并帮助我。我不知道如何处理从数据库检索数据到博客。
索引.php:
<?php
use app\controllers\AuthController;
use app\controllers\BlogController;
use app\controllers\SiteController;
use app\core\Application;
use app\models\Blog;
require_once __DIR__ . '/../vendor/autoload.php';
$dotenv = Dotenv\Dotenv::createImmutable(__DIR__);
$dotenv->load();
$config = [
'userClass' => \app\models\User::class,
'db' => [
'dsn' => $_ENV['DB_DSN'],
'user' => $_ENV['DB_USER'],
'password' => $_ENV['DB_PASSWORD']
]
];
$app = new Application(dirname(__DIR__), $config);
$app->on(Application::EVENT_BEFORE_REQUEST, function () {
});
$app->router->get('/', [SiteController::class, 'home']);
$app->router->get('/contact', [SiteController::class, 'contact']);
$app->router->post('/contact', [SiteController::class, 'contact']);
$app->router->get('/login', [AuthController::class, 'login']);
$app->router->post('/login', [AuthController::class, 'login']);
$app->router->get('/register', [AuthController::class, 'register']);
$app->router->post('/register', [AuthController::class, 'register']);
$app->router->get('/logout', [AuthController::class, 'logout']);
$app->router->get('/myaccount', [AuthController::class, 'myaccount']);
$app->router->get('/blog', [BlogController::class, 'blog']);
$app->run();
路由器.php:
<?php
namespace app\core;
use app\core\exception\NotFoundException;
class Router
{
public Request $request;
public Response $response;
protected array $routes = [];
public function __construct(Request $request, Response $response)
{
$this->request = $request;
$this->response = $response;
}
public function get($url, $callback, $params ="")
{
$this->routes['get'][$url] = $callback;
}
public function post($url, $callback)
{
$this->routes['post'][$url] = $callback;
}
public function resolve()
{
$url = $this->request->getUrl();
$method = $this->request->method();
$callback = $this->routes[$method][$url] ?? false;
if ($callback === false) {
throw new NotFoundException();
}
if (is_string($callback)) {
return Application::$app->view->renderView($callback);
}
if (is_array($callback)) {
/** @var \app\core\Controller $controller */
$controller = new $callback[0]();
Application::$app->controller = $controller;
$controller->action = $callback[1];
$callback[0] = $controller;
foreach ($controller->getMiddlewares() as $middleware) {
$middleware->execute();
}
}
return call_user_func($callback, $this->request, $this->response);
}
}
解决方案
推荐阅读
- python - 有没有办法随机化我的字符串中的字母?
- javascript - 通过 onclick 按钮更改数据库数据
- python - Python FastAPI:如何创建通用异常处理程序以阻止应用程序因未处理的异常而崩溃?
- macos - DB21005E 访问文件时发生错误
- php - 从 MySQL 中的同一个表中更新和选择
- prolog - 如何判断一个数是否是2的幂
- boto3 - 带有 boto3/aws cli 的 Lambda 服务配额返回没有结果
- react-native - 使用 React Native 进行 Google MLKit 姿势检测
- php - PHP 未找到,但在路径和 settings.json 中
- kubernetes - 为什么 Kubernetes 默认不允许在 master 节点上运行 Pod?