在MVC或MVP(PHP)中实现视图
我亲身体验过PHP的丑陋所能造成的恐怖和枪击。我正在进行我的下一个项目(你可能想知道为什么我不只是在切换语言,但这不是我来这里的原因),我决定这次尝试做对,或者至少做得更好 我已经定义了一些模型,并且开始使用主控制器。我在如何实现视图的决策上遇到了困难。到目前为止,主控制器可以得到要调用的显示函数列表,然后它可以通过一次调用输出整个页面。它看起来像:在MVC或MVP(PHP)中实现视图,php,model-view-controller,implementation,mvp,Php,Model View Controller,Implementation,Mvp,我亲身体验过PHP的丑陋所能造成的恐怖和枪击。我正在进行我的下一个项目(你可能想知道为什么我不只是在切换语言,但这不是我来这里的原因),我决定这次尝试做对,或者至少做得更好 我已经定义了一些模型,并且开始使用主控制器。我在如何实现视图的决策上遇到了困难。到目前为止,主控制器可以得到要调用的显示函数列表,然后它可以通过一次调用输出整个页面。它看起来像: function Parse_Body() { foreach ($this->body_calls as $command
function Parse_Body()
{
foreach ($this->body_calls as $command)
{
$call = $command['call'];
if (isset($command['args'])) $call($command['args']);
else $call();
}
}
我的困境是:
让我的所有显示函数返回它们生成的HTML是否更好,这样主控制器就可以echo$page
或者显示文件应该使用PHP之外的原始HTML,PHP在读取后立即获得输出
有了前者,主应用程序控制器可以精确地控制输出的时间,而无需完全控制显示器的突发奇想。更不用说,所有这些要调用的显示函数列表(如上)都不能从显示文件中执行,除非它们被传递出去。使用后一种方法,我可以在实际的HTML中使用HTML,而不是使用巨大的PHP字符串块。另外,我可以只包含文件来运行它,而不是调用函数。所以我想用这种方法,一个文件就像一个函数
请提供任何输入或建议?通过使用输出控制函数,您既可以获得HTML字符串,又可以在PHP代码中嵌入HTML,这两种功能都可以发挥作用: 从PHP手册@中:
这就像拿苹果和桔子做比较
有我所有的朋友会更好吗
显示函数返回它们所使用的HTML
生成,以便主控制器
可以只回显$page;还是应该
显示文件在外部使用原始HTML
PHP,它在运行时立即获得输出
阅读
php的优点之一是其处理与输出类似:
因此:
基于此,我认为最好是使用HTML,并且只需使用PHP.< /P>打印适当的动态字段。 为了让芬纳控制输出,您可以使用:ob_start作为古鲁努的建议
当然,您可以使用几种php MVC框架中的任何一种。 我现在更喜欢的是: 但我也可以帮你 最后,如果您不想使用任何框架 您仍然可以使用非常苗条的模板引擎:。 这将为您的视图开发节省一些麻烦。首先缓冲一切。然后在脚本末尾使用解析器替换标记
<?php
$page_buffer = '';
function p($s){
global $page_buffer;
$page_buffer .= $s;
}
$page_buffer = str_replace(
array('<$content$>','<$title$>'),
array($pagecontent,$pagetitle),
$page_buffer);
echo $page_buffer;
?>
以这种方式实现输出缓冲和视图模型
我有没有提到在“回显”之前在变量中缓冲输出的好处 只需开始一行,用4个空格设置代码格式。我试过了,但屡次失败。也许是因为我使用了实际的代码标记?但PHP小组再次建议删除短标记。因此,考虑再次使用,因为您可能需要在不久的将来对其进行更改。使用建议的框架之一(ZF、Solar)可能是一个很好的做法。Mauris您可以指出“建议删除短标签”。人们建议不要使用它们,因为在某些php安装中,它们在php.ini中被禁用,但我喜欢在视图/模板中使用它们。这比写容易:在几个地方。而且,我相信建议是反对PHP ASP风格的短标记(and),而不是所有的短标记(例如and)?
<h1> <?= $myHeading; ?> </h1>
echo "<h1>$myHeading</h1>";
echo heading1($myHeading); //heading1() being an hypothethical user defined function.
<?php
$page_buffer = '';
function p($s){
global $page_buffer;
$page_buffer .= $s;
}
$page_buffer = str_replace(
array('<$content$>','<$title$>'),
array($pagecontent,$pagetitle),
$page_buffer);
echo $page_buffer;
?>