【问题标题】:can I add properties to a typo3 extbase domain model object?我可以向typo3 extbase 域模型对象添加属性吗?
【发布时间】:2013-11-21 01:23:06
【问题描述】:

我想将用户名存储在优惠券对象中,每个优惠券对象已经拥有创建它的用户的 uid。我可以遍历优惠券对象并从 fe_users 读取相关的用户名,但是我将如何将这些用户名保存到优惠券中,以便在将它们传递给模板时,可以像这样使用优惠券.用户名或其他一些简单的方式读取用户名所以每个用户名都会出现在带有正确优惠券的页面上,因为它们都打印在表格中?

如果我在做基本的 php 而不是typo3,我只会定义一个查询,但typo3 v4.5 的方式是什么?

到目前为止,我的代码 - 在我尝试将新属性 --creatorname -- 分配给 $coup 对象的那一行终止。

public function listAction() {
        $coupons = $this->couponRepository->findAll();
                // @var Tx_Extbase_Domain_Repository_FrontendUserRepository $userRepository */
                $userRepository = $this->objectManager->get("Tx_Extbase_Domain_Repository_FrontendUserRepository");
                foreach ($coupons as $coup) {
                    echo '<br />test '.$coup->getCreator(); 
                    echo '<br />count = '.$userRepository->countAll().'<br />';
                    $newObject =  $userRepository->findByUid( intval($coup->getCreator()));
                    //var_dump($newObject);

                    var_dump($coup);
                    echo '<br />getUsername '.$newObject->getUsername() ; 
                    $coup['creatorname'] = $newObject->getUsername();
                     echo '<br />creatorname '.$coup['creatorname'] ; 
                }
        $this->view->assign('coupons', $coupons);
    }

【问题讨论】:

    标签: php object properties typo3 extbase


    【解决方案1】:

    使前端用户成为模型的属性

    这是我的首选解决方案。您的优惠券模型中已经有一个 Ceator,它似乎只是一个整数值。您可以将其与 fe_user 建立真正的关系。

    型号:

    /**
     * @var Tx_Extbase_Domain_Model_FrontendUser
     */
    protected $creator;
    
    /**
     * @param Tx_Extbase_Domain_Model_FrontendUser $creator
     * @return void
     */
    public function setCreator(Tx_Extbase_Domain_Model_FrontendUser $creator) {
        $this->creator = $creator;
    }
    
    /**
     * @return Tx_Extbase_Domain_Model_FrontendUser
     */
    public function getCreator() {
        return $this->creator;
    }
    

    TCA: 在您的优惠券表的 TCA 配置中,您将创建者列更改为

    ...    
    'creator' => array(
          'label' => 'your/label/from/locallang.xml',
          'config' => array(
            'type' => 'select',
            'foreign_table' => 'fe_users'
          )
        ),
    ...
    

    在此之后,您可以为您的优惠券设置一个孔 FrontendUser 对象。这也适用于您现有的优惠券,因为在数据库中仍然只存储 fe_user 的 uid。只有 Typo3(通过 TCA)和 extbase(通过模型)被告知这是与 fe_users 的关系。所以 $coupon->getCreator() 现在返回一个 FrontendUser。但是您不必在控制器中调用它,只需将您的 $coupons 传递给视图。您可以在 Fluid 中访问创建者的用户名

    {coupon.creator.username}
    

    【讨论】:

    • 谢谢,我现在就试试。