PHP MVC -数据库路由


PHP MVC - Database routing?

嗨,我目前正在玩PHP MVC编程,并想知道是否有人做了某种"路由"与数据库?

我有一个"page"表,看起来像这样:https://i.stack.imgur.com/KKeFO.png

目前所有的路由都是硬编码的,我认为这一定是可能的与数据库…

但是我不仅想要获得页面并显示它,我还需要能够发送参数。

的例子:如我的页表所示,我有一个"测试"url。如果我输入http://demo.com/test/,我将得到"重新路由"以使用"home"控制器和"Index"方法。但我还需要能够键入http://demo.com/test/id/40和id/40将作为参数发送到控制器/方法。

如果这不是一件好事,或者如果有人有更好的解决方案,请告诉我!:)

问候,弗雷德里克

这当然取决于您使用的服务器,但由于您是PHP MVC新手,我将在本示例中引用apache,并希望它是为了示例的缘故。

首先,你需要你的web服务器配置知道它必须通过你的基本页面(通常是index.php)发送所有流量。现在这个页面会做一些其他的事情(调用bootstrap等),但为了方便讨论,我们说它现在做的就是查看来自页面的请求,将其与DB进行比较,如果可以的话完成请求。

在这种情况下,将来自服务器的请求信息传递到index.php页面将会很有帮助。要做到这一点,您需要使用类似于

的.htaccess文件配置apache:
DirectoryIndex index.php
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+)$ public/?path=$1 [L,QSA]

这告诉它对所有不是特定文件或目录的请求使用index.php,并将完整的url路径作为$_GET var传递给index.php。

接下来,在index.php中,您将需要根据DB的路径检查传递给您的路径。下面是一个非常简单的例子:

<?php
// Obviously use your database and some string parsing here to match correctly
// I generally explode the path on '/' to break it into controller, action, etc.
if ($_GET['path'] == "user/account") {
    // Then you call the controller that matches the first part of the route
    // The action that matches the second part of your route
    // And pass the request along so you can access anything else
    call UserController::accountAction($_REQUEST);
} else if ($_GET['path'] == "user/resetpassword") {
    call UserController::resetPasswordAction($_REQUEST);
}

从那里,你应该在正确的地方,你需要的一切。控制器/动作URL格式是一种相当常见的格式,因为它很容易让我们做到这一点。

希望答案有帮助!