首页 > 解决方案 > __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。怎么做?

先感谢您。

标签: symfonydependency-injection

解决方案


不确定您想要实现什么,但如果您想在代码库中的任何地方添加/获取关键字,您有 2 个选择:

  • 使用自动装配
  • 将您的类声明为服务并从容器中获取它。

Symfony 通过自动装配来鼓励 DI。

namespace App\Controller;

use App\AddKeyword;

class DefaultController
{
    public function __construct(Addkeyword $keyword) {
        $keyword('keyword');
    }

}

推荐阅读