【发布时间】:2009-12-17 15:23:00
【问题描述】:
我认为,在我创建的最后几个网站中,我实现了一种 MVC 风格的控制器。
我使用mod_rewrite通过index.php发送所有内容,所以url变成了查询字符串。
它有效,但我想知道它是否有点 hacky,或者只是公认的做事方式。有没有更好的办法?我不要框架,我要自己学着做。
【问题讨论】:
标签: php model-view-controller mod-rewrite
我认为,在我创建的最后几个网站中,我实现了一种 MVC 风格的控制器。
我使用mod_rewrite通过index.php发送所有内容,所以url变成了查询字符串。
它有效,但我想知道它是否有点 hacky,或者只是公认的做事方式。有没有更好的办法?我不要框架,我要自己学着做。
【问题讨论】:
标签: php model-view-controller mod-rewrite
试试我在世界上最小的框架。
<?php
$g=$_GET;$c=@$g['c']?$g['c']:'Home';
if(!@include"c/$c.php")die('fail');
$m=method_exists($c,$m=@$g['m'])?$m:'index';
$o=new$c();$o->$m($g);
在 index.php 中,您的控件是 ./c/Blog.php 中的 Blog.php。
class Blog {
function index()
{
echo "Hello world";
}
function otherpage()
{
echo "ZOMG!";
}
主要是为了开玩笑,因为我想制作一个可以放入推文的框架,但基本逻辑就在那里;-)
【讨论】:
通过单一入口点传递所有内容,例如index.php 不是 MVC,它是 FrontController 模式。不过,这与 MVC 配合得很好。请参阅我的相关@987654321@。
除此之外,何不看看周围的一些框架,了解它们是如何做到的。并不意味着你必须使用它们,只需查看它们的代码并适应你自己的框架即可。
【讨论】:
这就是我完成它的方式。然后,我创建了一个新的调度表,基于 URL、要实例化哪个控制器以及要运行哪个调度。
【讨论】:
学习自己做,但仍然使用框架如何?无论哪种方式,看看像 Symfony 这样的开源框架或像 Wordpress、Jommla 这样的 CMS 应用程序!等等,你会发现他们都是用mod_rewrite来设置的。
【讨论】:
大多数 PHP 框架使用 mod_rewrite 确实实现了相同的目标,这是抑制 index.php 并使 url 更友好的唯一方法,以分段的方式。
我会说你走在正确的道路上。
您使用的那个方法称为FrontController Pattern,这些框架也使用它来配合MVC 模式。
如果您愿意提出建议,我建议您让每个请求都通过每个页面控制器,扩展一个基本控制器,因为每个站点都有一些基本数据结构,您可能需要在每个页面中使用这些数据结构,例如作为模板和会话控制。
【讨论】: