Joe*_*Joe 6 php model-view-controller codeigniter
1)您网站的主页在哪里适合"控制者"?我见过有些人使用"页面"控制器来处理静态页面,例如,关于,回家,联系等等,但对我来说这似乎不是一个好主意.为您的主页创建一个独特的控制器是一个更好的选择吗?毕竟,它可能需要访问多个模型,而且并不是真正适用于整个,每个模型理论的一个控制器,一些人使用.
2)如果您需要一个用于多种类型用户的仪表板,那么这将是一个仪表板控制器,它将根据哪个用户切换代码,或者您是否会在每个用户的每个控制器中说出仪表板操作?例如,管理员/仪表板,帐户/仪表板等.
3)在我看来,使用整个简单的CRUD示例在尝试解释控制器时就像一个魅力,但是一旦你通过这些简单的功能,它就会崩溃并导致你的控制器变得笨拙.当其他人在用户控制器中创建登录功能时,为什么有些人会选择创建登录控制器?我认为的一个原因是我们很多人来自页面方法背景,并且很难将控制器视为"对象"或"名词",因为页面并不总是以这种方式工作.例如,为什么你想创建一个"页面"控制器来处理真正与彼此无关的页面只是为了让一个"容器"适合于操作.对我来说似乎不对.
4)控制器是否应该更多地与用例相关而不是可以执行操作的"对象"?出于所有密集目的,您可以创建一个用户控制器来执行整个应用程序中的每个操作.或者你可以按照某些人喜欢的说法为每个"关注区域"创建一个控制器.或者,如果需要,您可以为每个视图创建一个控制器.有太多的余地使得很难找到一致的使用方法.
控制器可能不应该是这种混乱,但由于某种原因,它们让我感到困惑.任何有用的评论将不胜感激.
1) 我为我的一些MVC使用一个简单的自制程序集,它将控制器名称与动作和视图名称相关联(它是一个Front Controller样式,类似于Zend).对于通用网站,我们假设它有一个主页,隐私政策,联系页面和一个关于页面.我真的不想做单独的控制器,所有这些事情,所以我会坚持他们我的里面IndexController,有像函数名actionIndex(),actionPrivacy(),actionContact(),和actionAbout().
与此同时,在我的Views目录中,我有一个与每个动作关联的模板目录.默认情况下,任何操作都会自动查找关联的模板,但您可以根据需要指定一个模板.所以actionPrivacy()会寻找模板文件index/privacy.php,actionContact()寻找index/contact.php,等等.
当然,这也与URL有关.所以一个url命中http://www.example.com/index/about就会运行actionAbout(),这会加载About页面模板.由于about页面是完全静态的内容,actionAbout()除了为Front Controller提供公共操作以查看和运行之外,我绝对不做任何事情.
所以为了回答你的问题的核心,我确实把多个"页面"放到一个控制器中,它可以用于我的目的.每个控制器的一个模型是我认为在使用Web MVC时我不会尝试遵循的理论,因为它似乎更适合状态更好的应用程序.
2) 为此,我会有多个控制器.下面我上面用同样的方法,我会/admin/dashboard和/account/dashboard你的建议,但我们没有理由他们不能使用相同(或相同的部分)的模板.
我想如果我有大量不同类型的用户,我会使事情变得更通用,只使用一个控制器,并有一个mod_rewrite规则来处理加载.这可能取决于仪表板的功能复杂程度,以及帐户设置的内容.
3)我发现CRUD功能很难直接实现到MVC的任何层,并且仍然具有干净,灵活和高效的特点.我喜欢将CRUD功能抽象到任何对象可以调用的服务层中,并且具有基础对象类,我可以从中扩展任何需要CRUD的对象.
我建议使用一些PHP ORM框架来进行CRUD.他们可以消除很多获得良好实现的麻烦.
在登录控制器与用户控制器方面,我认为这取决于您的应用程序域.根据我的编程风格,我倾向于将"登录"视为用户模型域内的简单操作,因此在用户控制器内对其进行单一操作.更确切地说,我将UserController实例化一个用户模型并在模型上调用登录例程.我不能告诉你这是正确的方法,因为我无法确定应该采用什么样的正确方法.这是一个背景问题.
4) 你对这个余地是正确的.您可以轻松创建一个控制器来处理您的应用程序/站点想要执行的所有操作.但是,我认为你会同意这会成为维护的噩梦.我仍然在考虑我在市场研究公司的最后一份工作,其中内部PHP应用程序是由海外团队完成的,我只能假设几乎没有培训.我们正在讨论处理整个网站的10,000行脚本.维持是不可能的.
所以,我建议你将你的app/site分解为业务领域,并根据它创建控制器.找出你的应用程序的核心概念,然后从那里开始.
假设我有一个关于海牛的网站,因为显然海牛摇滚.我想要一些正常的网站页面(关于,联系等),用户帐户管理,论坛,图片库,也许还有研究文档材料领域(有关海牛的最新科学).非常简单,其中很多都是静态的,但你可以开始看到故障.
IndexController - 处理页面,隐私政策,通用静态内容.
UserController - 处理帐户创建,登录/注销,首选项
PictureController - 显示图片,处理上传
ForumController - 可能不多,我会尝试整合一个外部论坛,这意味着我不需要太多功能.
LibraryController - 显示最近的新闻和研究列表
HugAManateeController - 虚拟海牛通过HTTP实时拥抱
这可能至少给你一个基本的分离.如果您发现控制器变得非常大,可能是时候将业务域分解为单独的控制器.
每个项目都会有所不同,所以一点点的规划就会对你将拥有什么样的建筑结构有很大的帮助.
Web MVC可以变得非常主观,因为它与您的应用程序具有状态的MVC模型完全不同.在处理Web应用程序时,我尝试将主要功能保留在控制器之外.我喜欢它们实例化一些对象或模型,根据正在采取的操作运行几个方法,并收集一些View数据,一旦完成就传递给View.越简单越好,我将核心业务逻辑放入模型中,这些模型应该代表应用程序的状态.
希望有所帮助.