在我的扩展中"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'
],
];