我可以在typo3 extbase域模型对象中添加属性吗?

时间:2013-11-08 21:49:53

标签: php object properties typo3 extbase

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

如果我在做基本的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);
    }

1 个答案:

答案 0 :(得分:1)

使Frontenduser成为模型的属性

这是我首选的解决方案。您的优惠券模型中已经有一个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-&gt; getCreator()现在返回FrontendUser。但你不必在你的控制器中调用它,只需将$ coupons传递给视图。您可以使用

访问Fluid中创建者的用户名
{coupon.creator.username}