Typo3 编辑前端中的隐藏记录

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

我正在构建一个扩展来编辑前端的tt_新闻记录。 我在我的存储库中设置了
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对我来说也非常有用!