gpt4 book ai didi

extbase - 保存 ExtBase 模型后如何获取 ID?

转载 作者:行者123 更新时间:2023-12-02 14:13:39 26 4
gpt4 key购买 nike

创建模型并将其添加到存储库后,我希望拥有用于不同目的的新 ID(创建邮件、更新 Extbase 世界之外的其他字段)

$page = t3lib_div::makeInstance('Tx_MyExt_Domain_Model_Page');
$page->setTitle('Hello World');
$this->pageRepository->add($page);

此时$page还没有获得ID,uid为null。

$page->getUid(); // returns null

什么时候能收到?我如何在运行时检索?

最佳答案

在 ExtBase 中,对象是“托管的”。这意味着每个持久性事务(添加/删除/更新)都只是在底层逻辑中记录,但直到适当的时间(例如处理请求结束)才执行。因此,仅仅因为您将对象添加到存储库并不意味着它实际上已添加。实际上,一旦调用 $persistenceManager->persistAll() 就会发生这种情况,这永远不需要您手动执行。关键是,您的 $page 对象在保存之前不会有 UID,这就是 $page->getUid() 返回 null 的原因。 Look here for a great explanation.

我怀疑您正在尝试在 ExtBase 对象/MVC 生命周期之外执行某些操作。至少,上次我尝试获取对象的 UID 时得到 null ,那是因为我没有在框架内进行适当的操作。

但是,如果您发布更多代码并让我们更全面地了解您想要实现的目标,也许我们可以帮助您了解该对象实际上具有 UID。例如,如果您位于 Controller 对象中,请告诉我们您所在的 Action 方法,或者如果您位于 Repository 对象中,请告诉我们您想要从存储库中获取什么以及您计划在何处/如何进行关于使用查询结果。

编辑

只是在这里猜测,但我假设您在 Controller 的某些操作中执行此代码。由于 Controller 执行后会渲染 View ,因此您只需将页面对象传递给 View 即可:

$this->view->assign('page', $page);

然后在您的 View 中,您可以在链接中使用页面对象:

<f:link.action action="show" arguments="{page:page}">
See this page object
</f:link.action>

然后在 Controller 的显示操作中,您可以显示页面:

public function showAction(Tx_MyExt_Domain_Model_Page $page) {
// Do whatever you need to show the page in the `Show.html` template
}

我真的只是在这里猜测。如果您能让我们更全面地了解您想要做什么、您的操作方法应该做什么以及类似的事情,我们就可以更自信地回答您的问题。

(我还假设您的页面对象不是常规 TYPO3 页面的替代品,并且它们是完全不同的东西。通过后端接口(interface)处理这些 TYPO3 页面比在php 级别。)

关于extbase - 保存 ExtBase 模型后如何获取 ID?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10242439/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com