2009-07-03 38 views
0

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

我已经掌握了网站的基础知识。注册,登录,配置文件页面e.t.c.但是,这似乎是我必须对网站布局做出决定的地方。

例如,目前,用户的个人资料页中

mysite.com/profile.php的URL

理想我想什么是它是沿的

东西线mysite.com/user/ChrisSalij

从阅读this除了其他事情我相信我需要一个前端控制器风格s迭代,但我不确定这一点,也不知道从哪里开始实施。请记住,我对PHP和类似的新手很感兴趣,我会很感激任何有用的评论,链接和建设性的批评。

我敢肯定会学习如此链接文章和解释将是优秀的。我通常对这样的东西进行大量的研究。但我很新,我不知道从哪里开始。

编辑:我还应该补充一点,我正在计划扩大这个网站的规模。从一开始就很小,但如果我的目标实现了,那么应该有几页。所以我愿意现在就努力让它长期成立。 谢谢

+0

嘿家伙theres一些非常好的回应,特别是罗伯特,马克,艾伦和拉斐尔。如果我有足够的代表我最好了投票大家.....唉,我只是很短所需的15:d 感谢 – 2009-07-04 19:18:37

回答

5

好,欢迎来到PHP :)

首先的世界,一个前端控制器通常被称为MVC(模型 - 视图 - 控制器)一个更大的框架中只有1份。简而言之,前端控制器可以作为所有用户访问您网站时所使用的“索引”页面。它处理启动需要的网站事务,然后拉动和运行处理用户请求所需的资源(通常通过URL,正如您给出的mysite.com/user/ ...)。这是一个非常简单的解释。

虽然不一定是一件很难学的东西,但我会建议您查看一个像this这样的教程,它解释了MVC的整个构思和基本实现。他们称前端控制器为“路由器”(这是另一回事,实现MVC的方式不止一种,或者它的变体和不同部分的名称不止一个)。我不认为这是特别难以理解或掌握的。大多数现代MVC框架都实现了面向对象编程实践。对于一组好的PHP视频截屏(包括一些基本的面向对象技巧),请看看here。最后,如果这是您第一次使用PHP并希望实现类似MVC的功能,那么您可以查看类似CakePHPCodeIgniter的内容。伟大的框架,有很好的文档,并为您做了很多辛苦的工作。祝你好运

+0

非常感谢罗伯特。我目前正在非常感兴趣地看着codeigniter。此外,潜水到PHP系列是填补了我自我思考PHP的一些差距。非常感谢。 – 2009-07-04 19:16:01

0

您应该看看Zend Framework,它为您提供了这种开箱即用的功能。

他们有一个很好的指导,这将让你很快就去。

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

+0

说不上谁downvoted你,但你不值得这么+1 – mpen 2009-07-03 22:20:27

+0

令人惊讶...这是一个非常有效的答案。谢谢! – 2009-07-03 22:24:29

0

我西弗同意,这也可以用URL重写处理。你也应该看看像CakePHP和CodeIgniter这样的框架,它们会自动为你做这样的事情。

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

创建了 “Front Controller网站风格” 将意味着

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

  2. 映射该URL的PHP​​类名(控制器)和在该控制器(通常称为行动的方法。

然而,不WA nt直接为此使用PHP,您想要使用PHP/MVC框架或基于PHP的CMS。示例包括Joomla,Concrete5,Code IgniterPHP Cake。这是一个“解决”的问题。

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

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

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

1

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

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

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

1

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

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

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