首页 文章

TYPO3 extbase:如何使用ObjectStorage?

提问于
浏览
2

我正在尝试使用m:n关系,就像FrontEndUser与FrontEndUserGroup相关,例如没有中间mm表 . 在我的控制器中,我构建了我的对象,然后我调用 $barRepository->update($barObject); 来更新我的对象的值 . 但是,它在更新函数上失败并出现错误:

Fatal error: Call to undefined method Cbrunet\Up\Domain\Model\Foo::getPosition() in /home/cbrunet/websites/typo3_src-6.1.1/typo3/sysext/extbase/Classes/Persistence/Generic/Backend.php on line 486

其中 Foo 是Bar的ObjectStorage中包含的对象的类型 . 我的理解是 getPosition 应该在 ObjectStorage 上调用,而不是在 ObjectStorage 中包含的对象 . 但是,我无法弄清楚为什么这在我的情况下不起作用 .

这是在TYPO3 6.1.5中 . 任何提示将不胜感激 .


Foo 具有m:n关系的 Bar 模型如下所示:

namespace Cbrunet\Up\Domain\Model;

class Bar extends \TYPO3\CMS\Extbase\DomainObject\AbstractEntity {

/**
 * @var \TYPO3\CMS\Extbase\Persistence\ObjectStorage<\Cbrunet\Up\Domain\Model\Foo>
 */
protected $myprop;

public function __construct() {
    $this->myprop = new \TYPO3\CMS\Extbase\Persistence\ObjectStorage();
}

/**
 * @param \TYPO3\CMS\Extbase\Persistence\ObjectStorage $myprop
 * @return void
 */
public function setMyprop(\TYPO3\CMS\Extbase\Persistence\ObjectStorage $myprop) {
    $this->myprop = $myprop;
}

/**
 * @param \Cbrunet\Up\Domain\Model\Foo $myprop
 * @return void
 */
public function addMyprop(\Cbrunet\Up\Domain\Model\Foo $myprop) {
    $this->myprop->attach($myprop);
}

/**
 * @param \Cbrunet\Up\Domain\Model\Foo $myprop
 * @return void
 */
public function removeMyprop(\Cbrunet\Up\Domain\Model\Foo $myprop) {
    $this->myprop->detach($myprop);
}

/**
 * @return \TYPO3\CMS\Extbase\Persistence\ObjectStorage
 */
public function getMyprop() {
    return $this->myprop;
}
}

我的控制器中的相关代码如下所示:

/**
 * action update
 *
 * @return void
 */
public function updateAction() {
    $args = $this->request->getArgument('myargs');
    foreach ($args as $k=>$val) {
        $pp = $this->barRepository->findOneByAprop($k); // another prop of Bar, not illustrated in the code above.
        $listepour = new \TYPO3\CMS\Extbase\Persistence\ObjectStorage();
        foreach ($val as $p) {
            $ap = $this->fooRepository->findOneByUid(intval($p));
            $listepour->attach($ap);
        }
        $pp->setMyprop($listepour);
        $this->barRepository->update($pp); // error occurs here
    }
    $this->redirect('list');
}

1 回答

  • 3
    • 您是否也配置了TCA?

    • 你的域模型中有initStorageObjects函数吗?

    您也可以尝试使用扩展管理器构建这些案例并比较代码 .

相关问题