symfony - __invoke 在 Symfony 中
问题描述
我想将我的代码库拆分为简单的特定用途的类,例如:
class AddKeyword
{
/**
* @var KeywordRepository
*/
private $keywordRepository;
public function __construct(KeywordRepository $keywordRepository)
{
$this->keywordRepository = $keywordRepository;
}
public function __invoke(string $name): Keyword
{
$entity = $this->keywordRepository->findOneByName($name);
if ($entity)
return $entity;
$entity = Keyword::create(KeywordId::create(), $name);
$this->keywordRepository->save($entity);
return $entity;
}
}
但是为了使用那个类,我必须解决 DI。怎么做?
先感谢您。
解决方案
不确定您想要实现什么,但如果您想在代码库中的任何地方添加/获取关键字,您有 2 个选择:
- 使用自动装配
- 将您的类声明为服务并从容器中获取它。
Symfony 通过自动装配来鼓励 DI。
namespace App\Controller;
use App\AddKeyword;
class DefaultController
{
public function __construct(Addkeyword $keyword) {
$keyword('keyword');
}
}
推荐阅读
- git - 在同一 Jenkins 管道中的下一个新代理中,如何在最后结束的代理中获取自定义环境变量(使用 AWS 代码提交 Jenkins 项目)
- asp.net-core-webapi - .net 核心 Web API 允许的所有特殊字符
- javascript - 而循环在较高的输出期间挂起
- c++ - 如何使while循环在上升时保持递增
- material-ui - 如何访问主题工具栏断点属性?
- docker - 我可以在基于容器的 Azure 批处理池中使用 docker 卷吗
- javascript - 如何使用 performance.measureMemory() API 进行前端可观察性?
- powershell - 如何创建嵌套数组并在其中添加数组元素?
- formatting - 重置项目以具有一致的间距约定
- r - 重新排序数据框的行