通过注入扩展存储库对null上的成员函数进行调用



在我的扩展中"MyExt";我扩展控制器的扩展";ExtA";。在这个控制器中,我想加载NewsRepository的扩展版本,但我总是得到一个

Call to a member function getMyNews() on null

我的控制器代码如下:

<?php
namespace M3MyExtController;
use VendorAExtADomainModelModelA;
use M3MyExtDomainRepositoryNewsRepository;

/**
* Class ModelAController
* @package M3MyExtController
*/
class ModelAController extends VendorAExtAControllerModelAController
{
/**
* @var NewsRepository|null
*/
private ?NewsRepository $newsRepository = null;
/**
* @param NewsRepository $newsRepository
* @return void
*/
public function injectNewsRepository(NewsRepository $newsRepository)
{
$this->newsRepository = $newsRepository;
}

public function Action()
{
...
$news = $this->newsRepository->getMyNews();
...
}
}

我在这里做错了什么?

至少phpstorm没有抱怨。。。

您是否使用创建了EXT:myext/Configuration/Extbase/Persistence/Classes.php

<?php
declare(strict_types = 1);
return [
M3MyExtDomainModelFileReference::class => [
'tableName' => 'tx_myext_domain_model_news',
'properties' => [
//'originalFileIdentifier' => [
//    'fieldName' => 'uid_local'
//]
]
],
];

我试试这个:

/**
* @var NewsRepository|null
*/
private ?NewsRepository $newsRepository = null;
/**
* @param NewsRepository $newsRepository
* @return void
*/
public function injectNewsRepository(NewsRepository $newsRepository)
{
$this->newsRepository = $newsRepository;
}

结果是

Call to a member function getMyNews() on null

此:

public function __construct(NewsRepository $newsRepository)
{
$this->dependency = $newsRepository;
}

结果是

Too few arguments to function M3MyExtControllerMyController::__construct(), 0 passed in /.../TYPO3/typo3-10LTS-latest/typo3/sysext/core/Classes/Utility/GeneralUtility.php on line 3480 and exactly 1 expected

和这个:

$newsRepository = $this->objectManager->get(M3WihemerDomainRepositoryNewsRepository::class);

结果是

database.tx_myext_domain_model_news' doesn't exist

我找不到使用我的扩展新闻库的方法。。。这一切看起来像是依赖注入中的错误,但在哪里呢?

我使用原始的NewsRepository没有问题,但不是我自己的。。。

谢谢,这似乎有效:

在我的控制器操作中:

...
$newsRepository = $this->objectManager->get(MyVendorMyExtDomainRepositoryNewsRepository::class);
$news = $newsRepository->getMyNews();
...

并且在EXT:myext/Configuration/Extbase/Persistence/Classes.php

<?php
declare(strict_types = 1);
return [
M3WihemerDomainModelNews::class => [
'tableName' => 'tx_news_domain_model_news'
],
];

最新更新