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 从Fluid for loop chaos访问Extbase ObjectStorage(如何避免嵌套循环)_Typo3_Fluid_Extbase_Typo3 6.2.x - Fatal编程技术网

Typo3 从Fluid for loop chaos访问Extbase ObjectStorage(如何避免嵌套循环)

Typo3 从Fluid for loop chaos访问Extbase ObjectStorage(如何避免嵌套循环),typo3,fluid,extbase,typo3-6.2.x,Typo3,Fluid,Extbase,Typo3 6.2.x,更新31.01。 同时,我做了一个新的测试,如Marcels网页上所写: 我也有同样的问题 目标是一个Feuser(登录)可以看到所有可用的客户端并选择他的收藏夹。因此,每个Feuser可以有多个客户端,每个客户端可以由多个Feuser选择。表关系是正确的。在后端,我可以看到并更新每一方的关系(客户端可以从列表中选择Feuser,反之亦然) 请在我的要点中找到所需的所有数据: 可在此处找到扩展的ZIP地址: 初始问题 对于一个小的Extbase扩展。我在Feuser和客户端之间有一个m:n连

更新31.01。

同时,我做了一个新的测试,如Marcels网页上所写:

我也有同样的问题

目标是一个Feuser(登录)可以看到所有可用的客户端并选择他的收藏夹。因此,每个Feuser可以有多个客户端,每个客户端可以由多个Feuser选择。表关系是正确的。在后端,我可以看到并更新每一方的关系(客户端可以从列表中选择Feuser,反之亦然)

请在我的要点中找到所需的所有数据:

可在此处找到扩展的ZIP地址:

初始问题 对于一个小的Extbase扩展。我在Feuser和客户端之间有一个m:n连接。每个Feuser可以有多个关联的客户端。我已经与extension Builder建立了关系,在后端,一切都可以根据需要工作

在我的前端插件中,我还可以使用attach将客户端添加到我的feuser(这很有效)

每个Feuser都可以看到所有客户机(这是可行的)。在所有客户机的for循环中,如果客户机与Feuser关联,我想显示一个图标(这是可行的)

但是如何避免内部for循环(见下文)


费尔斯型号

/**
 * Clients
 *
 * @lazy
 * @var \TYPO3\CMS\Extbase\Persistence\ObjectStorage<Exapoint\Exaibbrplus\Domain\Model\Clients>
 */
protected $clients;

/**
  * __construct
  */
public function __construct() {
    $this->initStorageObjects();
}

/**
 * Initializes all ObjectStorage properties.
 *
 * @return void
 */
protected function initStorageObjects() {
    $this->clients = new \TYPO3\CMS\Extbase\Persistence\ObjectStorage();
}

/**
 * Returns the clients
 * @return \TYPO3\CMS\Extbase\Persistence\ObjectStorage<\Exapoint\Exaibbrplus\Domain\Model\Clients> $clients
 */
public function getClients() {
    return $this->clients;
}
<f:for each="{clients}" as="client">
    <tr>
        <td>
            <f:for each="{feusers.clients}" as="singleClient">
                <f:if condition="{client.identifier}=={singleClient.identifier}">
                    <span class="glyphicon glyphicon-star" aria-hidden="true"></span>
                </f:if>
            </f:for>
        </td>
    </tr>
</f:for>
/**
*客户
*
*@懒惰
*@var\TYPO3\CMS\Extbase\Persistence\ObjectStorage
*/
受保护的客户;
/**
*_uuu构造
*/
公共函数构造(){
$this->initStorageObjects();
}
/**
*初始化所有ObjectStorage属性。
*
*@返回无效
*/
受保护的函数initStorageObjects(){
$this->clients=new\TYPO3\CMS\Extbase\Persistence\ObjectStorage();
}
/**
*返回客户端
*@return\TYPO3\CMS\Extbase\Persistence\ObjectStorage$clients
*/
公共函数getClients(){
返回$this->clients;
}
List.html

/**
 * Clients
 *
 * @lazy
 * @var \TYPO3\CMS\Extbase\Persistence\ObjectStorage<Exapoint\Exaibbrplus\Domain\Model\Clients>
 */
protected $clients;

/**
  * __construct
  */
public function __construct() {
    $this->initStorageObjects();
}

/**
 * Initializes all ObjectStorage properties.
 *
 * @return void
 */
protected function initStorageObjects() {
    $this->clients = new \TYPO3\CMS\Extbase\Persistence\ObjectStorage();
}

/**
 * Returns the clients
 * @return \TYPO3\CMS\Extbase\Persistence\ObjectStorage<\Exapoint\Exaibbrplus\Domain\Model\Clients> $clients
 */
public function getClients() {
    return $this->clients;
}
<f:for each="{clients}" as="client">
    <tr>
        <td>
            <f:for each="{feusers.clients}" as="singleClient">
                <f:if condition="{client.identifier}=={singleClient.identifier}">
                    <span class="glyphicon glyphicon-star" aria-hidden="true"></span>
                </f:if>
            </f:for>
        </td>
    </tr>
</f:for>

关系:

下面是我的Feuser客户的垃圾堆:

在我看来,如果一个FrontendUser可以有n个客户端,但一个客户端只能有一个FrontendUser,那么应该使用1:n关系

不知何故,您的代码非常分散注意力:您迭代了
{feuser.clients}
,但只有当
feuser
实际上不是FrontendUsers的ObjectStorage,而是单个FrontendUser时,您才能这样做。也许您可以发布更多的设置

A建议您在
客户机
模型中添加一个瞬态属性,例如:

/**
 * @var boolean
 * @transient
 */
protected $isChildOfAuthenticatedUser`
对于此属性,您将创建一个getter。getter将比较当前经过身份验证的用户是否与客户端的父用户相同。在本例中,我假设
客户端
只有一个父用户/
前端用户

/**
 * @return boolean
 */
public function $isChildOfAuthenticatedUser {
  if ((int)$GLOBALS['TSFE']->fe_user->user['uid'] === $this->frontendUser->getUid()) {
      return TRUE;
  } else {
      return FALSE;
  }
}
然后,在流体模板中,只需检查瞬态特性:

<f:if condition="{client.isChildOfAuthenticatedUser}">
  <span class="glyphicon glyphicon-star" aria-hidden="true"></span>
</f:if>


请记住,添加一些额外的检查,如果没有用户经过身份验证,是否也要显示数据。

一个Feuser可以有多个客户端。一个客户端也可以有多个Feuser。想象Feuser是一名医生。医生有多个客户端,客户端可以有多个医生(一个用于眼睛,一个用于烟道等)。每个登录的Feuser都可以“pic”他的客户机,其想法是向他们显示所有客户机,并用图标指示客户机15和客户机34已经与他们连接,如果没有,则允许他们将列表条目(客户机)附加到客户机上(Feuser).关于显示的数据,仅限登录用户使用,不公开。你的意思是因为可以访问Feuers数据吗?嗨,我在上一篇文章中添加了信息。对不起,我没有经验,我不想在这里出错……我是否应该删除旧问题,然后再做一个新问题?我应该如何继续?不,编辑该文章就可以了。我会得到答案稍后或明天再给你回复。