【发布时间】:2019-01-16 12:25:27
【问题描述】:
PHPMVC
仅使用一个控制器处理所有调用是一种好习惯吗?
class Controller {
invoke()
SignIn()
create()
admin()
}
或者是场景?如果每个场景都有不同的控制器?
【问题讨论】:
-
投票结束至广泛
标签: php model-view-controller controller
仅使用一个控制器处理所有调用是一种好习惯吗?
class Controller {
invoke()
SignIn()
create()
admin()
}
或者是场景?如果每个场景都有不同的控制器?
【问题讨论】:
标签: php model-view-controller controller
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;
希望对你有帮助!
【讨论】: