Typo3 编辑前端中的隐藏记录
我正在构建一个扩展来编辑前端的tt_新闻记录。 我在我的存储库中设置了Typo3 编辑前端中的隐藏记录,typo3,Typo3,我正在构建一个扩展来编辑前端的tt_新闻记录。 我在我的存储库中设置了setIgnoreEnableFields(TRUE)。 但是如果我试图编辑一个隐藏的记录,我会得到错误 找不到标识为“12345”的对象 有什么解决办法吗?我猜你在使用类似 /** * Single view of a news record * * @param \Vendor\Ext\Domain\Model\News $news news item */ public function detailAction
setIgnoreEnableFields(TRUE)
。
但是如果我试图编辑一个隐藏的记录,我会得到错误
找不到标识为“12345”的对象
有什么解决办法吗?我猜你在使用类似
/**
* Single view of a news record
*
* @param \Vendor\Ext\Domain\Model\News $news news item
*/
public function detailAction(\Vendor\Ext\Domain\Model\News $news = null)
您的问题是,存储库
不是用来获取记录的
作为解决方案,删除参数,清除缓存,然后尝试类似的操作
/**
* Single view of a news record
*
* @param \Vendor\Ext\Domain\Model\News $news news item
*/
public function detailAction() {
$id = (int)$this->request->getArgument('news');
if ($id) {
$news = $this->newsRepository->findByUid($previewNewsId);
}
}
现在,您可以操纵
查询设置并使用这些设置。我猜您正在使用类似
/**
* Single view of a news record
*
* @param \Vendor\Ext\Domain\Model\News $news news item
*/
public function detailAction(\Vendor\Ext\Domain\Model\News $news = null)
您的问题是,存储库
不是用来获取记录的
作为解决方案,删除参数,清除缓存,然后尝试类似的操作
/**
* Single view of a news record
*
* @param \Vendor\Ext\Domain\Model\News $news news item
*/
public function detailAction() {
$id = (int)$this->request->getArgument('news');
if ($id) {
$news = $this->newsRepository->findByUid($previewNewsId);
}
}
现在,您可以操作查询设置并使用这些设置。问题在于属性映射。如果extbase尝试将uid(12345)分配给域对象(tt_news),则不考虑存储库的“setEnableFields”设置。因此,您必须自己获取对象
简单的解决方案是在每个“显示”操作的initialize*操作中执行此操作。对于editAction,例如:
public function initializeEditAction() {
if ($this->request->hasArgument('news')) {
$newsUid = $this->request->getArgument('news');
if (!$this->newsRepository->findByUid($newsUid)) {
$defaultQuerySettings = $this->newsRepository->createQuery()->getQuerySettings();
$defaultQuerySettings->setIgnoreEnableFields(TRUE);
$this->newsRepository->setDefaultQuerySettings($defaultQuerySettings);
if ($news = $this->newsRepository->findByUid($newsUid)) {
$this->request->setArgument('news', $news);
}
}
}
}
最困难的部分是让对象更新。因为我从来没有尝试过,所以我找到了一个类型转换器,可以同时获取隐藏的记录
也许相反,要为所有内容注册TypeConverter(如ext\u localconf.php
中的示例),您可以尝试仅在initializeUpdateAction
中分配它
public function initializeUpdateAction() {
if ($this->arguments->hasArgument('news')) {
$this->arguments->getArgument('news')->getPropertyMappingConfiguration()
->setTypeConverter('MyVendor\\MyExtension\\Property\\TypeConverters\\MyPersistenObjectConverter')
}
}
问题是PropertyMapping。如果extbase尝试将uid(12345)分配给域对象(tt_news),则不遵守存储库的“setEnableFields”设置。因此,您必须自己获取对象
简单的解决方案是在每个“显示”操作的initialize*操作中执行此操作。对于editAction,例如:
public function initializeEditAction() {
if ($this->request->hasArgument('news')) {
$newsUid = $this->request->getArgument('news');
if (!$this->newsRepository->findByUid($newsUid)) {
$defaultQuerySettings = $this->newsRepository->createQuery()->getQuerySettings();
$defaultQuerySettings->setIgnoreEnableFields(TRUE);
$this->newsRepository->setDefaultQuerySettings($defaultQuerySettings);
if ($news = $this->newsRepository->findByUid($newsUid)) {
$this->request->setArgument('news', $news);
}
}
}
}
最困难的部分是让对象更新。因为我从来没有尝试过,所以我找到了一个类型转换器,可以同时获取隐藏的记录
也许相反,要为所有内容注册TypeConverter(如ext\u localconf.php
中的示例),您可以尝试仅在initializeUpdateAction
中分配它
public function initializeUpdateAction() {
if ($this->arguments->hasArgument('news')) {
$this->arguments->getArgument('news')->getPropertyMappingConfiguration()
->setTypeConverter('MyVendor\\MyExtension\\Property\\TypeConverters\\MyPersistenObjectConverter')
}
}
好的。我可以打开编辑表单。但是updateAction没有任何代码和错误消息,没有人可以进一步帮助您。SorryOk。所以我可以打开编辑表单。但是updateAction没有任何代码和错误消息,没有人可以进一步帮助您。SorryYou第一个解决方案可以工作,但是在updateAction中,我们必须通过$this->request获得newsUid->getArgument('news')[''uuuu identity'])。我将测试TypeConverter解决方案。谢谢!TypeCpInverter对我来说也很好!您的第一个解决方案会起作用,但在更新操作中,我们必须通过$this->request->getArgument('news')[''uuu identity'获取newsUid.Nest我将测试TypeConverter解决方案。谢谢!而且TypeCpConverter对我来说也非常有用!