【问题标题】:Php site structurephp网站结构
【发布时间】:2009-07-03 21:57:35
【问题描述】:

我目前正在设置我的网站,主要是使用 php。虽然这是我第一次使用它,所以我遇到了一些问题。

我已经掌握了网站的基础知识。注册、登录、个人资料页面等然而,这似乎是我必须对网站布局做出决定的地方。

例如。当前用户的个人资料页面的 URL 为

mysite.com/profile.php

理想情况下,我想要的是类似于

mysite.com/user/ChrisSalij

通过阅读this 我相信我需要一个前端控制器风格的网站,虽然我不确定这一点,也不知道从哪里开始实施。

请记住,我对 php 之类的东西还很陌生,如果有任何有用的 cmets、链接和建设性的批评,我将不胜感激。

我非常愿意学习,因此文章和解释的链接会非常好。我通常会对这样的事情进行大量研究。但我对它太陌生了,我不知道从哪里开始。

编辑:我还应该补充一点,我正计划将这个网站扩大到大规模。一开始它很小,但如果我的目标成功的话,应该会有很多页。所以我愿意现在就努力让它长期正确设置。 谢谢

【问题讨论】:

  • 大家好,有一些非常好的回应,特别是 Robert、Mark、Alan 和 Raffael。如果我有足够的代表,我会投票给你们......唉,我只是缺少所需的 15 个 :D 谢谢

标签: php front-controller


【解决方案1】:

好吧,欢迎来到 PHP 的世界 :)

首先,前端控制器通常只是称为 MVC(模型-视图-控制器)的更大框架的一部分。简单地说,前端控制器可以看作是所有人访问您的站点时都会访问的“索引”页面。它处理启动所需的站点事物,然后提取并运行处理用户请求所需的资源(通常通过 URL,如您提供的 mysite.com/user/...)。这是一个过于简单的解释。

虽然不一定很难学习,但我建议您查看类似 this 的教程,该教程解释了 MVC 的整个想法和基本实现。他们将前端控制器称为“路由器”(这是另一回事,实现 MVC 或其变体的方法不止一种,不同部分的名称也不止一种)。我认为它的特殊性并不难理解或掌握。大多数现代 MVC 框架确实实现了面向对象的编程实践。有关 PHP 的精彩视频截屏(包括一些基本的 OOP 技能),请查看here

最后,如果这是您第一次大量使用 PHP,并且想要实现类似 MVC 的东西,您可以查看类似 CakePHPCodeIgniter 的东西。具有良好文档并为您完成大量艰苦工作的出色框架。祝你好运

【讨论】:

【解决方案2】:

假设您使用的是 apache,您可以在站点的根目录创建一个名为 .htaccess 的文件,然后添加这些行

RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule .* /index.php?url=$0 [L,QSA]

这会将所有页面请求传递给 index.php。在 index.php 中,您需要解析 $_GET['url'] 并使用 include 加载正确的页面。您必须清理输入并确保人们没有包含他们不应该包含的任何内容。您可以通过以下方式获得这些作品:

list($controller, $username) = explode('/', $_GET['url']);

典型的 MVC 结构将使用 controller/action/id。如果“action”被省略,就像你的例子一样,我会把它默认为“view”。如“查看”用户的个人资料。 ID 将是用户名。通常,每个控制器都是一个类,每个动作都是该类中的一个函数,之后的任何参数都将传递给该函数。每个动作还有一个关联的视图文件。

为您提供一个完整的示例需要大量代码(我刚刚编写了一个 MVC 框架!),但这应该为您提供入门的基础知识。

如果您需要更多详细信息和代码示例,请务必查看其他一些框架,例如 CakePHP、Kohana/CodeIgniter。

【讨论】:

    【解决方案3】:

    创建一个“前端控制器风格的网站”意味着

    1. 使用 mod_rewrite 拦截所有进入您的网站/应用程序的请求

    2. 将该 URL 映射到 PHP 类名(您的控制器)和该控制器上的方法(通常称为操作。

    但是,不想为此直接使用 PHP,您想使用 PHP/MVC 框架或基于 PHP 的 CMS。示例包括 JoomlaConcrete5Code IgniterPHP Cake。这是一个“已解决”的问题。

    所有这些框架都已经完成了(除其他外)决定何时/如何将 URL 转换为 PHP 类的艰苦工作。通过选择一个,您可以忽略重新实施轮子并专注于您的核心业务(您正在构建的网站)。

    这并不是说没有新框架的空间,无论是从头构建还是结合了来自其他框架的模块(例如优秀的Zend Framework)。但是,您提出这样一个基本问题的事实意味着您可能没有足够的经验来成为应该构建它的人(不要难过,没有人神奇地拥有这种经验,它只会随着时间的推移而出现)

    获得一些使用现有框架的经验,看看它们是如何构建的,并感受一下你是如何使用它们的。然后“稍后”,一旦你拥有大量现实世界的经验,如果你仍然觉得需要构建自己的框架,你将处于更好的位置来解决问题。

    【讨论】:

    • 我认为您的链接有问题... :)
    • 谢谢 Raf,仅供参考,您可以在此处编辑帖子,并在看到此类内容时进行修复。这是建立代表的好方法。
    • mmhh...我目前无法编辑您的评论。也许我需要更高的代表分数。但感谢您提供的信息。
    【解决方案4】:

    查看URL Rewriting 或 Apache 的 mod_rewrite。

    【讨论】:

      【解决方案5】:

      我不知道您一般对 PHP 有多少了解。我绝对可以向您推荐的是下载和阅读 PHP 5 Power Programming 一书。您可以免费下载它here。阅读它需要很多时间,但它肯定会对你有很大帮助。 (您也可以只阅读部分章节。)

      我可以向您推荐的另一件事是阅读 Zend 框架中的Quick Start Guide。(框架本身可能对您来说太多了。)但是在本指南中,尤其是所有外部站点的链接都非常好。你可以从中学到很多理论。

      以及其他所有人所说的:从所有已建立的框架中学习。

      【讨论】:

        【解决方案6】:

        看看 Apache 的 mod_rewrite。像下面的代码这样简单的东西就可以解决问题。 如果学习使用 mod_rewrite 可以解决您的问题,我不会对架构做出决定。无论如何,它很有可能在未来对你有用。

        RewriteRule ^user/(.*)/$    profile.php?username=$1 [PT]
        

        编辑:前端控制器模式无法缩放。例如,如果您的应用程序的某个部分比其他部分使用更频繁,如果您使用的是前端控制器,则无法扩展该特定请求。

        【讨论】:

          【解决方案7】:

          您应该研究一下 Zend Framework 之类的东西,它为您提供了开箱即用的功能。

          他们有一个出色的指南,可以让您立即开始。

          http://framework.zend.com/docs/quickstart

          【讨论】:

          • 令人惊讶...这是一个完全有效的答案。谢谢!
          【解决方案8】:

          我同意 Sev,这也可以通过 url 重写来处理。你还应该研究一下像 CakePHP 和 CodeIgniter 这样的框架,它们会自动为你做一些这样的事情。

          【讨论】:

            猜你喜欢
            • 2014-04-30
            • 1970-01-01
            • 1970-01-01
            • 2012-11-08
            • 1970-01-01
            • 2015-02-14
            • 2015-01-05
            • 1970-01-01
            • 2021-12-31
            相关资源
            最近更新 更多