TYPO3:获取所有FE用户

时间:2017-01-24 16:29:25

标签: typo3 typoscript extbase

我正在尝试创建用户管理模块。我想得到所有FE用户。

这是我的控制器:

/**
 * @var \TYPO3\CMS\Extbase\Domain\Repository\FrontendUserRepository
 * @inject
 */
protected $feUserRepository;

然后我用:

$users = $this->feUserRepository->findAll();

$this->view->assign('users', $users);

但我得到的只是一个空物。

编辑:

出于某种原因

$this->feUserRepository->findByUId(1);

确实有效,但findAll()没有......

1 个答案:

答案 0 :(得分:1)

这是因为extbase会默默禁用respectStoragePage调用的querySettings上的findByUid($uid)设置。

所以,你有两个选择:

  1. 在插件的TypoScript配置中提供正确的存储pid(plugin.tx_myextension.persistence.storagePid)。这样,您将找到存储在给定页面上的每个前端用户。
  2. 您可以实现自己的FrontendUserRepository从extbase扩展存储库,但禁用所有调用的respectStoragePage(这样,无论存储记录的页面如何,您都将获得每个frontendUser上)。这是你如何做到的:

    use TYPO3\CMS\Extbase\Domain\Repository\FrontendUserRepository as ExtbaseFrontendUserRepository;
    
    class FrontendUserRepository extends ExtbaseFrontendUserRepository
    {
        /**
         * Disable respecting of a storage pid within queries globally.
         */
        public function initializeObject()
        {
            $defaultQuerySettings = $this->objectManager->get(\TYPO3\CMS\Extbase\Persistence\Generic\Typo3QuerySettings:class);
            $defaultQuerySettings->setRespectStoragePage(false);
            $this->setDefaultQuerySettings($defaultQuerySettings);
        }
    }
    
  3. 在您的控制器中,然后注入FrontendUserRepository。然后你应该为FrontendUser模型做同样的事情,然后告诉extbase你正在为你的模型使用fe_users表:

    config.tx_extbase {
        persistence {
            classes {
                Vendor\MyExtension\Domain\Model\FrontendUser {
                    mapping {
                        tableName = fe_users
                    }
                }
            }
        }
    }