Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typo3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
TYPO3 extbase:如何使用ObjectStorage?_Typo3_Extbase - Fatal编程技术网

TYPO3 extbase:如何使用ObjectStorage?

TYPO3 extbase:如何使用ObjectStorage?,typo3,extbase,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/typ

我尝试使用一个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
中包含的对象上调用。然而,我不明白为什么这在我的案例中不起作用

这在类型3.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');
}
  • 您是否也配置了TCA
  • 您的域模型中是否有initStorageObjects函数

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

缺少的部分是
initStorageObjects
函数。记录在哪里?为什么FrontEndUser没有这个函数?因为FrontEndUser在其构造方法中具有与initStorageObjects相同的调用,但在哪里记录它是一个好问题!?这就是为什么使用扩展管理器来比较一些设置是有用的,我也不知道这些东西是在哪里记录的。我觉得在ExtBase和friends进入竞技场后,为TYPO3编写代码变得更加困难。我喜欢这个框架,当然也喜欢不断发展的代码库,但我发现,在花了这么多时间试图解决如何做事情的时候,很难保持steam。我会喜欢参考等级的文档,但即使源代码中有几个链接说“我们在这里和这里讨论过这个”也会有很大的帮助!