【问题标题】:Virtual properties in TYPO3 extbase domain models?TYPO3 extbase 域模型中的虚拟属性?
【发布时间】:2019-04-18 09:32:15
【问题描述】:

我正在尝试在 TYPO3 9.5.x 中使用没有数据库字段表示的虚拟域模型属性,但我无法让它工作。

我的模型是这样的

class Project extends \TYPO3\CMS\Extbase\DomainObject\AbstractEntity {
   /**
     * participants
     *
     * @var string
     */
    protected $participants;

    ...

    /**
     * Returns the participants
     *
     * @return string $participants
     */
    public function getParticipants()
    {
        $this->participants = "foo";

        return $this->participants;
    }
}

我在调试模型时确实看到了该属性,但它始终是 null,好像它甚至无法识别 getter 方法 getParticipants()

知道我做错了什么吗?

已经在 ext_tables.sql 和 TCA 中添加了一个数据库字段,但似乎没有什么不同。

【问题讨论】:

    标签: typo3 extbase typo3-9.x


    【解决方案1】:

    该属性是null,因为这是 Extbase 调试器检查它时的状态。请注意,Extbase 调试器对 getter 一无所知,也不会调用它们。

    所以如果你想初始化你的属性,你必须在声明时这样做:

    protected $participants = 'foo';
    

    【讨论】:

    • 是的,我也注意到了。所以我不能用 Extbase 调试器调试虚拟属性,因为它不调用 getter?我基本上想要做的是基于模型条目的uid 在getter 方法中返回一个数组。
    • 嗯,你可以做到这一点,你只是不能预览不存在的东西。一个类似的例子是 TYPO3 中的 FileReference,它有很多有用的 getter 无法检查。
    【解决方案2】:

    您可以通过简单地访问该属性来调试它。 在 Fluid 中,如果您使用 <f:debug>{myModel}</f:debug>,您将看到 NULL 代表您的属性。

    但如果你直接使用<f:debug>{myModel.participants}</f:debug>,你会看到'foo'。

    【讨论】:

    • 感谢 Naderio,当我在阅读上面的 @Mathias Brodalas 评论后尝试这样做时,这确实起到了作用。谢谢!
    猜你喜欢
    • 1970-01-01
    • 2013-11-21
    • 2011-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多