2

我不确定我应该如何表达这一点,但我会试一试。
我最近开始用面向对象的 PHP 编写我的投资组合,我想知道使用单个页面是否符合最佳实践,其中内容根据 SQL 数据和 $_GET 变量而变化?

如果是/不是,为什么?

编辑:看看我的下一篇文章,更深入的细节。

4

12 回答 12

11

您是否在询问使用前端控制器模式,其中单个文件服务您的所有请求?通常这是通过 index.php 和 mod_rewrite 来完成的,它获取所有请求,并将 URL 的其余部分作为查询字符串中的参数提供给它。

http://www.onlamp.com/pub/a/php/2004/07/08/front_controller.html

我倾向于推荐这种模式用于应用程序,因为它为您提供了一个处理身份验证等事情的单一位置,并且通常您需要在更紧密的级别上集成事物,其中新功能是向控制器注册的类通过某种机制很有意义。

其他人提到的有关 URL 的担忧并不准确,因为 URL 结构和文件结构之间没有真正的关系,除非您使用的是古老的网站构建技术。大量的 apache 功能基于文件/目录结构和 URL 结构是不同概念的概念(别名模块、重写模块、内容协商等)

于 2008-09-23T15:56:29.513 回答
5
  • 不可扩展
  • 难以管理代码
  • 解析器必须解析所有内容
  • Code Smell 的完美例子
  • 一个错误使您的整个网站崩溃
于 2008-09-23T15:47:30.377 回答
5

如果您指的是单个登录页面(例如 index.php),然后使用会话变量等来确定需要包含哪些代码,那么是的,这是一种经常使用的技术。

编辑:以上我的意思是 Daniel Papasian 在他的优秀帖子中详细解释的内容

如果您的意思是将所有 HTML、SQL 和 PHP 放在一个文件中,那么不,因为 GateKiller 指出的原因。

于 2008-09-23T15:53:24.200 回答
2

实际页面文件应仅包含该页面与您网站上标准“页面”的不同之处(例如页面标题、索引页面可能包含获取最新消息的代码等)。所有被(或可能)在多个地方使用的东西,都应该被移到外部 php 文件中,并包含在内。例子是:

  • 数据库信息(密码、用户名等)
  • 页眉页脚
  • 登录代码

这使得代码更容易管理。例如,如果您更改数据库密码,它只有一个需要更新的文件,或者如果您决定在标题中添加横幅,那么它也只有一页,而不是所有需要更改的页面。

它还可以减少添加新功能的工作量,例如,新页面可能只是:

<?php
require ('config.php')
require ('start.php')
require ('header.php')
//custom page stuff
require ('footer.php')
?>

或通过 cookie 添加自动登录,是对 Login() 函数(创建 cookie)和 start.php(检查 cookie + 调用 Login())的简单更改。

您也可以在将来轻松地将这些文件传输到其他项目。

于 2008-09-23T15:58:18.667 回答
0

门杀手提到的所有内容+您也不能使用后期绑定。

于 2008-09-23T15:50:17.780 回答
0
  • 难以管理代码

如果您正在使用版本控制,那么回滚可能发生在您网站的单个“页面”上的任何更改将变得更加困难。因为您必须重新合并以处理可能发生的任何事情

于 2008-09-23T15:51:24.550 回答
0

除非您使用 mod rewrite,否则它对搜索引擎不友好

于 2008-09-23T15:51:44.877 回答
0

我倾向于不同意大多数 - 如果您的网站由自定义 CMS 或类似的东西管理,没有理由不使用一个页面。

我在不久前写的 CMS 上做了类似的事情。所有客户端都有一个 default.asp 页面,用于查询数据库的主题、内容、附件和成员权限。为了进行更改,我只进行了一次更改,如果需要更改,则将其复制给我的其他客户。

这当然在大多数情况下都行不通。如果您的网站做了很多不同的事情(我的 cms 只是在加载页面时重复了某些功能),那么多个页面确实是唯一的方法。

于 2008-09-23T15:57:31.353 回答
0

对于那些感兴趣的人,有一个使用这个精确模型的框架。最初用于 ColdFusion。这种方法仍然有一个社区,大约一年前(2007 年 12 月)发布了 5.5 版。

FuseBox 框架站点

维基百科条目

于 2008-09-23T16:07:15.680 回答
0

此屏幕转储和以下解释可能会更好地了解我的代码目前的样子。

文件结构

我使用的模型与“Internet Friend”、Daniel Papasian 和其他一些人提到的模型相同;前控制器。

我的索引页面看起来像这样。

require_once 'config.php';
require_once 'class_lib/template.php';

$template = new template($config);
$template->dataQuery();
$template->pageCheck();
$template->titleAssembly();
$template->cssAssembly();
$template->metaAssembly();
$template->menuAssembly();
$template->content();
echo $template->publish();

类构造打开主模板文件并将其加载到每个方法都可以通过用生成的代码替换标记来操作的变量中。丑陋的 URL 并不是真正的问题,因为我将使用 mod_rewrite 来清理它。
但是,Papasian 有一点,这种方法会更适合基于 Web 的应用程序等。

我很抱歉首先我的问题没有很具体。
此外,非常感谢所有放弃几行以提供帮助的人。

于 2008-09-23T17:06:13.933 回答
0

我经常使用没有 .php 扩展名的 php 文件(即站点)并添加

<Files site>
ForceType application/x-httpd-php 
</Files>

到 .htaccess ,它使 apache 将文件解释为 php 文件。

您可以将 var 解析为 url 中的文件:http ://www.yourdomain.com/site/var1/var2/var3

采用

$var_array = explode("/",$_SERVER['REQUEST_URI']); 
$var1 = $var_array[1];
$var2 = $var_array[2];
$var3 = $var_array[3];

获取变量。这样,您可以使用带有 searchengingfriendlyurls 的单个文件,而无需 modrewrite。

于 2008-09-23T20:16:54.847 回答
0

re: URL 和文件结构

我转换了一个网站,其中所有内容都在数据库中,并使用 index?p=434 模型进行访问。使用数据库没有任何好处,而且网站让那些不得不添加内容的人感到困惑,因为他们必须使用浏览器编辑内容,而页面只是数字。

我把所有内容都拿出来放在单独的文件中。每个都有一个合理的名称,并被组织成文件夹。每个文件看起来像这样:

require('sitelib');
do_header('about', 'About Us');
// content here
do_footer();

客户喜欢它。他们能够使用任何 HTML 编辑器进入,找到正确的文件并进行更改。他们能够制作新的页面。总而言之:有时,让 URL 和文件结构匹配很有用。

于 2008-11-12T16:21:27.947 回答