更好的方法#PHP MVC [关闭]
Posted
技术标签:
【中文标题】更好的方法#PHP MVC [关闭]【英文标题】:BETTER WAY #PHP MVC [closed] 【发布时间】:2019-01-16 12:25:27 【问题描述】:phpMVC
仅使用一个控制器处理所有调用是一种好习惯吗?
class Controller
invoke()
SignIn()
create()
admin()
或者是场景?如果每个场景都有不同的控制器?
【问题讨论】:
投票结束至广泛 【参考方案1】:Controller
是您的业务逻辑和发出的请求之间的粘合剂。
尽管它可以包含很多功能,但它们都应该特定于所讨论的目标请求。
一个控制器的小描述,你会发现类似的情况如下:
控制器是将模型、视图和其他组件绑定到一个可运行的应用程序中的粘合剂。控制器负责直接处理最终用户的请求。因此,控制器
了解这一点,为了让您的控制器保持专注,您需要问自己一个问题:控制器是否引用了此功能?
您可以在laravel
组织他们的MVC
的方式中找到灵感。您会注意到他们将所有authentication
请求分隔为AuthController
。
这个AuthController
负责:
-> 捕获将包含 密码 和 电子邮件(或您创建的任何其他方法)的 POST
请求。
-> 如果成功则对用户进行身份验证;
-> 根据auth
的结果重定向到正确的视图(返回登录页面或显示仪表板);
最新是您必须开始组织流程的地方。看看这个:
-> 如果用户成功通过身份验证,那么您希望呈现dashboard
视图;
-> 仪表板视图实际上并不是AuthController
的一部分,而是与DashboardController
更直接相关。因此,您实际上希望通过routes
从AuthController
重定向到DashboardController
;
所以你的问题的答案是,这取决于!如果您添加到控制器的逻辑专注于应用程序的特定业务逻辑部分,请不要为您可能拥有的 methods
数量所困扰。这完全取决于您的应用程序的复杂性;
但是如果您的控制器开始拥有对应用程序的许多不同部门执行许多不同操作的方法,假设您有一个控制器:
->creates products
->deletes products;
->Authenticates users;
->list users;
-> etc
那你做错了,没有相应地分离业务逻辑。
控制器的职责是将请求与正确的业务逻辑粘合在一起,然后将所有数据重定向到正确的视图以显示它。 它不应该知道:
-> How the data is fetched (doing the Model job);
-> How the data should be parsed for display (doing the Marshaller job);
-> Checking if the data exists (doing the Hydrator job);
among other concerns. It literally does:
1. Oh! got a request from route `list/users`;
2. To list users I better call all users in my database (Call the Model);
3. Right, I believe they should be here, lets tell the view to be generated;
4. Here you go view, you list them as you wish, I dont really care;
希望对你有帮助!
【讨论】:
@tereško 我一直在学习。如果这是错误的,我会担心,我可以把它拿下来!但是如果可以的话,我会要求一些见解,以便我可以采用更好的方法:) @tereško 我创建了一个room 以供讨论,如果你愿意/有时间去看看。第一次做,还是很迷茫! x)以上是关于更好的方法#PHP MVC [关闭]的主要内容,如果未能解决你的问题,请参考以下文章
使用 gd lib 或将 FileReader() 与 Jcrop 一起使用是操作图像的更好方法吗? [关闭]
在我的 Spring MVC Magnolia 模块中获取 JCR Session 对象的更好方法是 LifeTimeJCRSessionUtil