我构建了一个扩展,其中包含一个'详细信息'表,其中包含标题和描述的详细信息,这些内容包含在另一个对象的内联中。现在新的细节存储在与对象相同的pid中,但我想改变它。
this question回答了{p> Merec,并在评论中指出了一个解决方案(将“pid”列添加到您的模型中,这是该模型首先看到的)但要求制定一个另外一个问题......我接受了他的建议,但无法让它工作,所以这是单独的问题,此外我想知道如何从配置中获取一个值作为pid使用此
更新:RenéPflamm指出我应该强调我正在尝试将此Pid设置为在后端保存,而不是在前端......我后来基本上认识到了这个命运
my constants.ts:
plugin.tx_myext {
persistence {
# cat=plugin.tx_myext/storage/a; type=string; label=Default storage PID
defaultStoragePid =
# cat=plugin.tx_myext/storage/a; type=string; label=Details storage PID
detailsStoragePid =
}
}
我的setup.ts
plugin.tx_myext {
persistence {
storagePid = {$plugin.tx_myext.persistence.defaultStoragePid}
detailPid = {$plugin.tx_myext.persistence.detailsStoragePid}
}
}
答案 0 :(得分:3)
我不确定我是否理解正确但您可以告诉extbase查看多个pid以查找您的记录并说明应该存储的每个记录:
plugin.tx_myext {
persistence {
storagePid = {$plugin.tx_myext.persistence.defaultStoragePid},{$plugin.tx_myext.persistence.detailStoragePid}
classes {
Vendor\MyExt\Domain\Model\Detail {
newRecordStoragePid = {$plugin.tx_myext.persistence.detailStoragePid}
}
}
}
}
答案 1 :(得分:2)
模型继承自TYPO3\CMS\Extbase\DomainObject\AbstractDomainObject
,其中包含$pid
的getter和setter。如果设置该字段,则不使用所有自动设置字段(即typoscript中的newRecordStoragePid)。
有了这个,您可以设置所需的所有存储位置。
$myModel = $this->objectManager->create('Vendor\\Namespace\\Domain\\Model\\MyModel');
$myModel->setPid(4321);
部分来自TYPO3\CMS\Extbase\DomainObject\AbstractDomainObject
:
/**
* @var int The id of the page the record is "stored".
*/
protected $pid;
/**
* Setter for the pid.
*
* @param int|NULL $pid
* @return void
*/
public function setPid($pid)
{
if ($pid === null) {
$this->pid = null;
} else {
$this->pid = (int)$pid;
}
}
/**
* Getter for the pid.
*
* @return int The pid or NULL if none set yet.
*/
public function getPid()
{
if ($this->pid === null) {
return null;
} else {
return (int)$this->pid;
}
}
答案 2 :(得分:0)
您可以在扩展程序中创建元素时说出应该使用pid的模型。
在你的TS中:
plugin.tx_myext.settings {
detailPid = {$plugin.tx_myext.persistence.detailsStoragePid}
}
在上面的代码中,它看起来像:
public function createDetailsAction(Detail $detail) {
$detail->setPid($this->settings['detailPid']);
$this->detailRepository->add($detail);
}