在 TYPO3 9.5 LTS / Extbase 中扩展存储库

Extend repository in TYPO3 9.5 LTS / Extbase

我正在尝试扩展此 IndexRepository 以添加我自己的特殊搜索方法。

在控制器中,我将自己的 IndexRepository 注入:

use Webian\Iancalendar\Domain\Repository\IndexRepository;

/**
 * Inject index repository.
 *
 * @param IndexRepository $indexRepository
 */
public function injectIndexRepository(IndexRepository $indexRepository)
{
    $this->indexRepository = $indexRepository;
}

我所做的工作正常,但我收到此警告:

PHP Warning
Core: Error handler (BE): PHP Warning: Declaration of Webian\Iancalendar\Controller\
BackendController::injectIndexRepository(Webian\Iancalendar\Domain\Repository\IndexRepository $indexRepository)
should be compatible with HDNET\Calendarize\Controller\
AbstractController::injectIndexRepository(HDNET\Calendarize\Domain\Repository\IndexRepository $indexRepository)
in /typo3conf/ext/iancalendar/Classes/Controller/BackendController.php line 42

那是因为我正在使用我自己的 Webian\Iancalendar\Domain\Repository\IndexRepository 扩展 HDNET\Calendarize\Domain\Repository\IndexRepository。如果我使用原来的警告不会出现,但显然我自己的方法没有被调用。

如何避免该警告?

您要么不扩展 HDNET\Calendarize\Controller\AbstractController,而是扩展 Extbase 的默认 AbstractController,那么您将需要自己实现所有必需的逻辑。

或者您只是为您的注入方法使用不同的名称:

use HDNET\Calendarize\Controller\AbstractController;
use MyNamespace\MyExtension\Domain\Repository\IndexRepository;

class MyController extends AbstractController
{

...

    /**
    * The index repository.
    *
    * @var IndexRepository
    */
    protected $myIndexRepository;

    /**
    * Inject index repository.
    *
    * @param IndexRepository $myIndexRepository
    */
    public function injectMyIndexRepository(IndexRepository $myIndexRepository)
    {
        $this->myIndexRepository = $myIndexRepository;
    }

...

class IndexRepository extends \HDNET\Calendarize\Domain\Repository\IndexRepository
{

...

    // My method that extends \HDNET\Calendarize\Domain\Repository\IndexRepository functionalities
    public function findByStartDate(DateTime $startDate = null, DateTime $endDate = null)
    {

...

方法名称并不重要,重要的是它以 inject 开头,并且有一个类型提示指示要注入的依赖项。