PHP网站结构

时间:2009-07-03 21:57:36

标签: php front-controller

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

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

例如。目前,用户的个人资料页面的网址为

  

mysite.com/profile.php

理想情况下,我想要的是

  

mysite.com/user/ChrisSalij

从阅读this以及其他事情我认为我需要一个Front Controller风格的网站,虽然我不确定这一点,也不知道从哪里开始实施。

请记住,我对php等很新,我会感谢任何有用的评论,链接和建设性的批评。

我非常愿意学习,所以链接到文章和解释会非常好。我经常对这样的事情进行大量的研究。但我是新手,我不知道从哪里开始。

编辑:我还应该补充一点,我计划将这个网站扩展到大规模。它很小,但如果我的目标成功,应该会有很多页面。因此,我愿意现在付出努力,使其长期正确。 感谢

8 个答案:

答案 0 :(得分:5)

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

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

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

最后,如果这是您第一次使用PHP并希望实现类似MVC的功能,那么您可以查看CakePHPCodeIgniter之类的内容。伟大的框架,具有良好的文档,并为您做了很多艰苦的工作。祝你好运

答案 1 :(得分:5)

假设您使用的是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。

答案 2 :(得分:2)

创建“前端控制器样式站点”意味着

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

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

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

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

    这并不是说没有新框架的空间,无论是从头开始构建还是组合来自其他框架的模块(例如优秀的Zend Framework)。然而,你提出这样一个基本问题的事实意味着你可能没有足够的经验来成为那个应该建立这个问题的人(不要感觉不好,没有人神奇地拥有那种经验,它只会带来时间)

    使用现有框架获得一些经验,了解它们是如何构建的,并了解您如何使用它们。然后“稍后”,一旦你掌握了一堆真实世界的经验,如果你仍然觉得需要建立自己的框架,那么你将能够更好地解决这个问题。

答案 3 :(得分:1)

查看URL Rewriting或Apache的mod_rewrite。

答案 4 :(得分:1)

我不知道您对PHP有多少了解。我绝对可以推荐你下载并阅读PHP 5 Power Programming这本书。您可以免费下载here。阅读它需要花费大量时间,但它肯定会帮助你很多。 (您也可以阅读选择性章节。)

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

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

答案 5 :(得分:1)

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

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

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

答案 6 :(得分:0)

您应该查看类似Zend Framework的内容,它可以为您提供开箱即用的功能。

他们有一个很好的指南,可以让你立刻前进。

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

答案 7 :(得分:0)

我同意Sev,这也可以通过url重写来处理。您还应该查看像CakePHP和CodeIgniter这样的框架,它们会自动为您执行此类操作。

相关问题