在 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
开头,并且有一个类型提示指示要注入的依赖项。
我正在尝试扩展此 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
开头,并且有一个类型提示指示要注入的依赖项。