2

我正在做我的第一个单入口网站,根据结果,我看不到好处。

我已经实现了以下内容:

  • .htaccess 将所有请求重定向到根目录下的 index.php
  • Url 被解析并且每个 /segment/ 被存储为数组中的一个元素
  • 第一段指示要包含的文件夹(例如“users”»“/pages/users/index.php”)。
  • 每个文件夹的 index.php 文件解析segments数组中的剩余元素,直到数组为空。
  • 如果segments数组中没有更多元素,则包含每个文件夹的content.php文件,表示到达目标文件

样本

文件结构( [] 中的文件夹):

  • [根]
    • 索引.php
    • [页]
      • [用户]
        • 索引.php
        • 内容.php
        • [轮廓]
          • 索引.php
          • 内容.php
          • [编辑]
            • 索引.php
            • 内容.php
      • [其他页面]
        • 索引.php
        • 内容.php

请求: http: //mysite.com/users/profile/

  1. .htaccess 将请求重定向到http://mysite.com/index.php

  2. URL 被解析,segments 数组包含:[1] 用户,[2] 个人资料

  3. index.php 将 [1] 映射到“pages/users/index.php”,因此包含该文件

  4. pages/users/index.php 将 [2] 映射到 pages/users/profile/index.php,因此包含该文件

  5. 由于segments数组中没有其他元素,因此包含当前文件夹(pages/users/profile)中的contents.php文件。


我并没有真正看到这样做比拥有包含站点组件的函数(例如 include_header()、include_footer() 等)的好处,所以我得出结论,我做的事情非常错误。我只是不确定它是什么。

4

2 回答 2

4

您拥有的这个版本缺少一些功能,只能用作非常简单的前端控制器模式。

大多数系统不会将 URL 映射到作为页面的单个 PHP 文件- 它们将 URL 路径映射到知道如何构建页面的控制器。

此外,并非所有 URL 都需要映射到直接文件。例如,查看github.com/[username]/[repo]. 你不能创建数百万个bob/ajaxstuff/index.php文件——你需要使用正则表达式告诉控制器你想要这个项目的写入页面。

$app->get('/:username/:repo', function ($username, $repo) {
    echo "Looking at $username's $repo";
});

要真正掌握如何正确使用它,我建议您使用功能齐全的路由系统,例如简单的Slim 框架

如果您想了解有关路由设计和理论的更多信息,我建议您阅读php-router 的自述文件和来自 warpspire的优秀URL 设计帖子。

如果其中任何一个太多,您还可以查看klein和超级简单的ToroPHP库。

于 2012-10-22T16:52:58.773 回答
2

这是因为当您的内容存储在数据库中时,您通常会使用这种方法,而不是像您拥有的基于文件的系统。如果您的页面是独立文件,则无需重写。

于 2012-10-22T16:57:11.910 回答