TYPO3 extbase:如何使用ObjectStorage?

时间:2013-10-24 02:35:08

标签: typo3 extbase

我正在尝试使用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中包含的对象上调用Bar。但是,我无法弄清楚为什么这在我的情况下不起作用。

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


Foo具有m:n关系的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}}

1 个答案:

答案 0 :(得分:3)

  • 您是否也配置了TCA?
  • 您的域模型中是否有 initStorageObjects -function?

此外,您可以尝试使用扩展管理器构建这些案例并比较代码。