Joh*_*ith 3 php model-view-controller
我看到网站的许多MVC实现都有单入口点,例如index.php文件,然后解析URL以确定要运行的控制器.这对我来说似乎很奇怪,因为它涉及使用Apache重写来重写URL,并且有足够的页面使单个文件变得臃肿.
为什么不只是让各个页面成为控制器?我的意思是,如果您的网站上有一个列出所有已注册成员的members.php
页面,那么用户导航到的页面将成为成员的控制者.此php文件将在成员模型中查询数据库中的成员列表,并将其传递给成员视图.
我可能会遗漏一些东西,因为我最近才发现MVC,但这个问题一直困扰着我.难道这种设计不是优选的,因为不是有一个膨胀的入口文件,所有页面都不直观地调用模型和特定页面的视图被包含,封装,并从其各自的页面调用?
根据我的经验,单入口点有几个臭名昭着的优点:
它简化了集中式任务,例如资源加载(连接到db或memcache服务器,记录执行时间,会话处理等).如果要添加或删除集中任务,只需更改单个文件,即index.php.
在PHP中解析URL使"虚拟URL"与Web服务器上的物理文件布局分离.这意味着您可以轻松更改URL系统(例如,用于SEO目的或用于站点国际化),而无需实际更改服务器中脚本的位置.
但是,有时候有一个单一的入口点可能会浪费服务器资源.这显然适用于静态内容,但是当您有一组具有非常特定目的的请求时,只需要一小部分资源(例如,他们可能不需要数据库访问).那么你应该考虑有多个入口点.我已经为我正在处理的网站做了这个.它具有所有"标准"动态内容的入口点和另一个用于调用公共API的入口点,这需要更少的资源并具有完全不同的URL系统.
最后一点说明:如果网站实施得很好,你的index.php就不必变得臃肿:)