在过去,我一直在创建我的应用程序,基本上是一个视图(即search.php或display.php)和一个带有一堆函数的大文件(即library.php)。我打算通过使用没有框架的MVC路由来改变这一切。我只是没有时间学习新的框架,我想完成这项工作,并尽我所能将PHP代码与我的HTML代码分开。如果我能做到这一点,我很高兴。无论如何,如何处理以下内容?自从我开始创建用户会员类型网站以来,我认为我一直在以错误的方式做这件事。
我们以stackoverflow为例。访客访问者在标题顶部看到“登录”页面。登录后,“标题”将更改为与站点成员相关的显示菜单。在这种情况下,我会看到我的用户名和注销链接(以及其他一些链接)。我过去所做的就是把我的header.php(我把它包含在我的主页面中)和一些if / else语句,我会根据用户是否登录来显示它。
我在某个地方找到了一个例子(不记得),它有两个独立的视图。如果是访客用户,则显示与登录用户不同的标题。如果我必须跟踪用户是否登录并且必须为用户显示正确的视图,我的代码会变得非常混乱。
答案 0 :(得分:1)
我会看一下Smarty模板引擎。它位于http://www.smarty.net/
安装完成后,您应该能够编写将Controller与View分开的代码,如下所示:
SamplePage.php:
<?php
require 'Smarty.class.php';
class SamplePage extends Smarty
{
public function handleRequest()
{
$this->template_dir = '.';
$this->assign("text", "Hello World!");
$this->assign("userLoggedIn", true);
$this->display('SamplePage.htm');
}
}
$page = new SamplePage();
$page->handleRequest();
?>
SamplePage.htm:
<h1>{$text}</h1>
{if $userLoggedIn}
You are logged in.
{else}
You are not logged in.
{/if}
您需要创建一个名为templates_c的Web服务器可写目录来运行此示例。
答案 1 :(得分:1)
在您尝试设计自己的MVC框架之前,我建议使用具有简单学习曲线的轻量级框架(例如kohanaphp)。这样你就已经熟悉了MVC的细节,以避免常见的陷阱 - 更重要的是 - 了解最佳实践。欢呼声。
答案 2 :(得分:1)
当人们可能会说“让你的php远离你的HTML”时,最重要的事情就是让你的业务逻辑远离你的观点。如果您使用它来处理基本视图逻辑(例如循环遍历列表)或是否根据当前用户会话显示链接或菜单中的日志,那么在html中使用实际的PHP代码/语法绝对没有错。那很好,花花公子。
<ul>
<?php
foreach($items as $item):
?>
<li><?= $item; ?></li>
<?php
endforeach;
?>
</ul>
您仍然可以构建MVC应用程序并使用php作为视图逻辑。您的业务逻辑是处理域模型和数据持久性的任何事情。
据说这里有一篇关于这个主题的好文章:
http://fabien.potencier.org/article/34/templating-engines-in-php
在视图代码中使用像Smarty这样的模板引擎而不是纯php的优缺点。
如果您决定使用模板引擎,Smarty的替代品是最近发布的Twig引擎:
twig-project dot org
希望这有所帮助!
答案 3 :(得分:0)
MVC更像是一个“最佳实践”软件包..我看到人们在没有任何视图的控制器中编写代码应用程序..所以是的,一切都与一些相关。然而,你正在寻找的是一种划分你的层的方式..我不会走聪明的路线..你将不得不学习一种全新的语言..我会鼓励你花一点时间学习任何轻量级的MVC ..我真的很喜欢Code Igniter ..我已经使用了几次,让你开始很快。那里可能还有其他一些选择。
对于您的特定情况,您可以拥有一个主模板,可以说有2个包含...一个在$ _SESSION [userID]存在时运行,另一个在不运行时运行。几种方法......这只是一个想法。
正如我推荐的其他人一样,你花一天时间学习基本的MVC框架......从长远来看,这会有所帮助。