我一直在使用PHP的小页面,这个页面不需要它背后的完整框架的强大功能.我之前在Ruby-on-Rails中工作中缺少的一件事就是能够使用“content_for”有效地将内容传递到页面上.
我想知道的是,你如何创建一个可以在PHP中实现同样效果的页面生命周期?
所以,这是一个简单的例子:
假设您有一个模板,用于定义索引页,只需要在所有页面上使用的重复标题和菜单.所以你的index.PHP文件看起来基本上是这样的:
...header stuff...
<body>
<?PHP include $file.'.PHP'; ?>
</body>
...footer stuff...
编辑:感谢有关URL安全性的提示,但我们假设我正在安全地收到用户请求:)
现在,让我们在标题中说出你想要的:
<head>
<title><?PHP echo $page_title; ?></title>
</head>
能够在包含的文件中指定标题会很好,所以在网址http://example.com/index.PHP?p=test你正在加载test.PHP,该文件如下所示:
<?PHP $page_title = 'Test Page'; ?>
... rest of content ...
现在,显然这不起作用,因为在设置变量之前加载了包含页面(index.PHP).
在Rails中,您可以使用content_for函数在“页面上”传递内容.
我的问题是:你们都能想到在PHP中实现这种“content_for”功能的最简单,最简洁的方法是什么?
理想情况下,我想要的建议不涉及一些大框架,而是一些相对较轻的样板代码,可用于许多不同的应用程序.
解决方法:
>永远不要包括$_GET [‘p’].这会在您的站点中打开一个巨大的安全漏洞,因为包含接受文件名和URL,因此任何人都可以读取您站点上的任何文件并执行服务器上的任何代码.您可能希望首先检查并清理该值.
>如果您需要简单的东西,可以将页眉和页脚放在单独的文件中,执行test.PHP,它将设置变量,使用output buffering捕获其输出,然后包含标题,输出中间部分并包含页脚.例:
<?PHP ob_start(); ?>
<body>
<?PHP include $filename.'.PHP'; ?>
</body>
<?PHP $content = ob_get_clean();
include 'header.PHP';
echo $content;
include 'footer.PHP';
?>