单项实施出错了

时间:2012-10-22 16:47:49

标签: php implementation

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

我已实施以下内容:

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

示例

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

  • [根]
    • 的index.php
    • [页]
      • [用户]
        • 的index.php
        • content.php
        • [资料]
          • 的index.php
          • content.php
          • [编辑]
            • 的index.php
            • content.php
      • [其它页面]
        • 的index.php
        • content.php

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

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

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

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

  4. pages / users / index.php maps [2]到pages / users / profile / index.php,所以包含该文件

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


  6. 我没有真正看到这样做的好处,而不是包含网站组件的功能(例如include_header(),include_footer()等),所以我得出的结论是,我做的事情非常糟糕。我只是不确定它是什么。

2 个答案:

答案 0 :(得分: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 Framework

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

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

答案 1 :(得分:2)

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