drupal-8 - D8 - 我需要在我的街区使用许多服务,这段代码对吗?
问题描述
开发一个 Drupal 8 示例站点,我在一个模块中声明了块,我想用这个块做一些事情,比如检查路线并只在节点上显示这个块,还要检查用户是否有权查看这个块, 块的内容是我在模块的另一个地方定义的表格。
我不想以静态方式获取我需要的类/服务,我想使用依赖注入来获取这些类,因为从技术上讲,解耦代码并允许更好的测试更好。
现在块上的“create”方法和“constructor”方法是这样的:
<?php
public static function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition) {
return new static(
$configuration,
$plugin_id,
$plugin_definition,
$container->get('current_user'),
$container->get('form_builder'),
$container->get('current_route_match'),
$container->get('access_check.permission')
);
}
public function __construct(
array $configuration, $plugin_id,
$plugin_definition,
AccountProxyInterface $user,
FormBuilderInterface $formBuilder,
ResettableStackedRouteMatchInterface $route,
AccessInterface $access
) {
parent::__construct($configuration, $plugin_id, $plugin_definition);
$this->user = $user;
$this->formBuilder = $formBuilder;
$this->route = $route;
$this->access = $access;
}
这是正确的方法吗?也许我在块文件中做的太多了?我应该创建一个服务来将逻辑移动到另一个地方吗?可能我需要更多的东西,这意味着使用更多的服务,而且我的“创建”和“构造函数”方法的参数越来越多。这是正确的方法吗?谢谢。
解决方案
当您必须在一个类中注入许多服务时,无论是控制器还是块,它通常表明该类设计得不好,因为您(可能)在一个类中尝试了很多事情。
但是,我见过许多控制器在其构造函数中注入多个服务,因此无论如何这似乎并不是什么不寻常的做法。“每条规则都有例外”。
最后,我认为这是一个平衡的问题,构建一个负责做一件逻辑事情的类,它的依赖关系也是如此。
推荐阅读
- python - 如何在 django 模型/视图中计算总和
- python - 时间序列的 Seaborn 图周期性
- oauth - 在 Azure Devops Yaml 文件中使用“誓言令牌”不起作用
- scala - 使用 map 将 Map("a" -> 2, "b" -> 1) 转换为 seq("a","a","b")
- sql - 如何在oracle sql中实现for循环
- swift - 添加 SwiftUI 视图后无法归档应用程序
- django - 如何使用 Django 在 Ajax 响应中访问获取的数据?
- javascript - 如何在 Yandex JS Api 地图上设置固定大小的对象?
- javascript - jQuery:如何获取特定的元素子集?
- sql-server - 在 SQL Server Management Studio 中导入 CSV 文件时出现格式化日期列的问题