- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
创建模型并将其添加到存储库后,我希望拥有用于不同目的的新 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/
在我的 extbase/fluid 项目中,除了创建、删除、列表等标准操作之外,我还想创建存储在存储库中的模型类对象的副本。使用 findall(),所有对象都显示在列表中,并且相应的操作(例如删除、
创建模型并将其添加到存储库后,我希望拥有用于不同目的的新 ID(创建邮件、更新 Extbase 世界之外的其他字段) $page = t3lib_div::makeInstance('Tx_MyExt
我就是不能 findAll()即使我能够通过 findByUid() 访问特定记录,也可以返回任何内容。 我已记录(并尝试解决/设置)typoscript solution和 record stora
如何在extbase扩展 Controller 中获取当前页面的uri?如果我需要通过电子邮件发送当前 uri 或将其保存到数据库以供以后使用或统计。 最佳答案 您可以使用这一行: $this->ur
我需要获取实际的“一般记录存储页面 ID”。我发现了以下代码片段,但即使在页面上设置了 storagePid,该变量也是空的。 $config = $this->configurationManage
如何在前端获取隐藏记录?想要获取隐藏记录,然后将隐藏更改为 0。 最佳答案 您可以在存储库中为单一方法进行此设置: namespace Vendor\ExtensionName\Domain\Repo
当我的 Extbase 域对象之一从 TYPO3 后端的 ListView 中删除时,我想执行一些单独的代码。 认为它可以通过覆盖相应存储库中的 remove( $o ) 方法来工作,例如 publ
我已经扩展了 pages 表,现在我想使用名为“Tags”的域对象中的一些数据。 所以我在 /Configuration/TypoScript/setup.txt 中尝试了以下内容: plugin.m
我有一个域对象 Foo,它与域对象 Bar 有 1:n 的关系。 有两个主要用例,我需要让所有 foo 匹配某个标准。在情况 A 中,我关心连接到每个 foo 的条,在情况 B 中,我不关心。有相当多
我有自己的扩展,它有 Controller 和两个 Action :listAction 和 showAction。 问题:我可以在同一个页面显示两个 Action 吗? 在特定页面上,我用自己的插件
我正在尝试使用三个额外的日期(时间戳)字段来扩展扩展(新闻),并希望在我的(新闻)流体模板中调用这些字段。 到目前为止,我已经连接了所有内容,我可以在后端看到我的额外字段,而无需选择额外类型 - 我已
我有自己的扩展,它有 Controller 和两个 Action :listAction 和 showAction。 问题:我可以在同一个页面显示两个 Action 吗? 在特定页面上,我用自己的插件
我正在尝试创建一个对象,但值没有存储到数据库中。这是在“索引”操作上完成的,因为插件是通过 TypoScript 插入的,实际上并不创建输出。所以在调用 Action 时没有给出对象,这就是为什么我自
是否可以比较查询 api 中的两个数据库字段?例如,我想比较 tstamp 和 crdate 字段,例如: SELECT * FROM tt_content WHERE tstamp > crdate
在我的 extbase Controller 操作中,我想在上传文件后重定向到另一个 Controller /操作,因此我调用 $this->redirect('index', 'Download',
我有一个带有两个插件的扩展,我需要从这两个插件访问 getVars。 $this->request->getArguments(); 当然,上面的代码只给了我当前插件中的变量。 有人知道我如何从不同的
我尝试将事件的开始日期与当前日期进行比较,以便仅显示下一个事件。这是我在 eventRepository 中的尝试: public function findNext() { $query =
我正在使用 TYPO3 7.6.11 和 indexed_search 7.6.0。 我将 extbase 插件用于 indexed_search 并在输出中转义 HTML 标签以标记搜索词。例如,当
刚开始使用第一个 extbase 扩展。在 localconf 中,我添加了以下操作:“列表、新建、显示、创建、编辑”。 默认是“创建”重定向到没有参数的“列表”,并且在创建扩展后就可以正常工作。 $
我有一个扩展,我想在其中包含一些过滤器,我知道我可以使用 findBy 过滤我的 listAction() 显示的结果>. 我测试了它,它是这样工作的: $cars = $this->carRepos
我是一名优秀的程序员,十分优秀!