【问题标题】:Understanding the front controller with PHP用 PHP 理解前端控制器
【发布时间】:2014-04-16 16:59:51
【问题描述】:

我是 PHP 新手,我已经成功地创建了一个 非常 粗略的 CMS。目前,它正在使用许多不同的页面和包含。

但是,如果可能的话,我想使用一个控制器而不是拥有 很多 个页面(我已经有了 article.php/admin.php)。

作为一个例子,我试图转换成这样的东西:

switch ( 'admin' ) {
case 'home':
    include 'view/home.php';
    break;

case 'admin':
    include 'view/admin.php';
    break;

case 'article':
    include 'view/article.php';
    break;

default:
    echo 'default';
    break;
}

这将与 $_GET['page'] 一起使用,因此管理 URL 看起来像:http://cms.dev/?page=admin

但是,如果我需要转到 admin 的子目录会怎样?例如,如果这些是硬编码页面,我会选择admin/new-post.php。使用$_GET method,我能得到一个等价物吗?

抱歉,如果没有很好地解释这一点。让我知道,我会尝试编辑它。我已经使用了大量的教程,所以我不是 100% 的。

【问题讨论】:

  • 当你想使用前端控制器时。一切都应该从前端控制器调用,而不是导航到其他地方。
  • 查看本教程linkmvc
  • 这更适合路由器,而不是控制器。但此代码将始终包含 view/admin.php,因为您打开的是字符串而不是变量。

标签: php url-routing front-controller


【解决方案1】:

您可以在 $_GET['page'] 变量中使用正斜杠,因此 https://cms.dev/?page=admin/new-post.php 应该可以正常工作。

或者,您可以将其放入您的 .htaccess 中:

RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php [L,QSA]

然后从REQUEST_URI中获取:

$uri = parse_url($_SERVER["REQUEST_URI"], PHP_URL_PATH);

【讨论】:

    猜你喜欢
    • 2012-11-07
    • 1970-01-01
    • 2011-07-04
    • 2015-11-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-19
    相关资源
    最近更新 更多