TYPO3 - 如何通过 Viewhelper 获取 FE UID
TYPO3 - how to get FE UID via Viewhelper
如何通过 Viewhelper 获取和呈现 FE 用户的 uid?下面是通过控制器工作的……但不是在 Viewhelper 中。区别在哪里?我正在使用 7.6.11,最后我想要 FE 用户的 uid 和他的用户组 uid,并在扩展的 html 和一般部分中进一步使用它......
/typo3conf/ext/extension/Classes/ViewHelpers/UserViewHelper.php
<?php
namespace Vendor\Extension\ViewHelpers;
class UserViewHelper extends \TYPO3\CMS\Fluid\Core\ViewHelper\AbstractViewHelper {
/**
* User Repository
*
* @var \TYPO3\CMS\Extbase\Domain\Repository\FrontendUserRepository
* @inject
*/
protected $userRepository;
/**
* @var \TYPO3\CMS\Extbase\Domain\Repository\FrontendUserGroupRepository
* @inject
*/
protected $frontendUserGroupRepository;
public function render() {
$userIDTest = $this->userRepository->findByUid($GLOBALS['TSFE']->fe_user->user['uid']);
$this->view->assign('userIDTest', $userIDTest);
}
}
List.html
<f:layout name="Default" />
<f:section name="main">
{userIDTest.uid}
</f:section>
根据 Dimitry 的建议,我替换了
$this->view->assign('userIDTest', $userIDTest);
和
return $userIDTest;
在 List.html 我有这个:
{namespace custom=Vendor\Extension\ViewHelpers}
<f:layout name="Default" />
<f:section name="main">
<f:alias map="{user: '{custom:user()}'}">
{user.uid} {user.username}
</f:alias>
</f:section>
...并在清除所有缓存 (FE/BE/Install) 并删除 typo3temp 之后...现在可以使用了!
在 7.x 及更高版本中,ViewHelpers 被编译,导致 render
方法仅被调用一次进行编译。之后,只调用了静态方法renderStatic()
。你可以覆盖renderStatic
,每次都会调用:
<?php
namespace Vendor\Extension\ViewHelpers;
use TYPO3\CMS\Fluid\Core\ViewHelper\AbstractViewHelper;
class UserIdViewHelper extends AbstractViewHelper
{
public function render()
{
return static::renderStatic(
[],
$this->renderChildrenClosure,
$this->renderingContext
);
}
public static function renderStatic(
array $arguments,
\Closure $renderChildrenClosure,
RenderingContextInterface $renderingContext
) {
$userData = $GLOBALS['TSFE']->fe_user->user;
return null !== $userData ? (int)$userData['uid'] : null;
}
}
如果您需要在您的 ViewHelper 中使用某些服务,事情会变得更加复杂,因为依赖注入不适用于已编译的 ViewHelper。您需要获取对象管理器,并使用对象管理器获取服务实例。
这可能看起来像这样,假设您想要使用 FrontendUserRepository
作为服务,因为您想要 return 整个用户对象,而不仅仅是用户 uid:
<?php
namespace Vendor\Extension\ViewHelpers;
use TYPO3\CMS\Core\Utility\GeneralUtility;
use TYPO3\CMS\Extbase\Domain\Repository\FrontendUserRepository;
use TYPO3\CMS\Extbase\Object\ObjectManager;
use TYPO3\CMS\Fluid\Core\ViewHelper\AbstractViewHelper;
class UserViewHelper extends AbstractViewHelper
{
/**
* @var FrontendUserRepository
*/
private static $frontendUserRepository = null;
public function render()
{
return static::renderStatic(
[],
$this->renderChildrenClosure,
$this->renderingContext
);
}
public static function renderStatic(
array $arguments,
\Closure $renderChildrenClosure,
RenderingContextInterface $renderingContext
) {
$userData = $GLOBALS['TSFE']->fe_user->user;
if (null === $userData) {
return null;
}
return static::getFrontendUserRepository()->findByUid((int)$userData['uid']);
}
private static function getFrontendUserRepository()
{
if (null === static::$frontendUserRepository) {
$objectManager = GeneralUtility::makeInstance(ObjectManager::class);
static::$frontendUserRepository = $objectManager->get(FrontendUserRepository::class);
}
return static::$frontendUserRepository;
}
}
免责声明:所有代码都是在没有实际 运行 的情况下编写的,因此其中存在错误。
如果你想 return 用户或用户在 viewhelper 中的 uid,只需 return 即可。
而不是
$this->view->assign('userIDTest', $userIDTest);
这样做
return $userIDTest;
在您的流体中,您可以以不同的方式使用用户变量。最简单的方法是使用 "alias" viewhelper:https://fluidtypo3.org/viewhelpers/fluid/master/AliasViewHelper.html
<f:alias map="{user: '{namespace:user()}'}">
{user.uid} {user.username}
</f:alias>
如何通过 Viewhelper 获取和呈现 FE 用户的 uid?下面是通过控制器工作的……但不是在 Viewhelper 中。区别在哪里?我正在使用 7.6.11,最后我想要 FE 用户的 uid 和他的用户组 uid,并在扩展的 html 和一般部分中进一步使用它......
/typo3conf/ext/extension/Classes/ViewHelpers/UserViewHelper.php
<?php
namespace Vendor\Extension\ViewHelpers;
class UserViewHelper extends \TYPO3\CMS\Fluid\Core\ViewHelper\AbstractViewHelper {
/**
* User Repository
*
* @var \TYPO3\CMS\Extbase\Domain\Repository\FrontendUserRepository
* @inject
*/
protected $userRepository;
/**
* @var \TYPO3\CMS\Extbase\Domain\Repository\FrontendUserGroupRepository
* @inject
*/
protected $frontendUserGroupRepository;
public function render() {
$userIDTest = $this->userRepository->findByUid($GLOBALS['TSFE']->fe_user->user['uid']);
$this->view->assign('userIDTest', $userIDTest);
}
}
List.html
<f:layout name="Default" />
<f:section name="main">
{userIDTest.uid}
</f:section>
根据 Dimitry 的建议,我替换了
$this->view->assign('userIDTest', $userIDTest);
和
return $userIDTest;
在 List.html 我有这个:
{namespace custom=Vendor\Extension\ViewHelpers}
<f:layout name="Default" />
<f:section name="main">
<f:alias map="{user: '{custom:user()}'}">
{user.uid} {user.username}
</f:alias>
</f:section>
...并在清除所有缓存 (FE/BE/Install) 并删除 typo3temp 之后...现在可以使用了!
在 7.x 及更高版本中,ViewHelpers 被编译,导致 render
方法仅被调用一次进行编译。之后,只调用了静态方法renderStatic()
。你可以覆盖renderStatic
,每次都会调用:
<?php
namespace Vendor\Extension\ViewHelpers;
use TYPO3\CMS\Fluid\Core\ViewHelper\AbstractViewHelper;
class UserIdViewHelper extends AbstractViewHelper
{
public function render()
{
return static::renderStatic(
[],
$this->renderChildrenClosure,
$this->renderingContext
);
}
public static function renderStatic(
array $arguments,
\Closure $renderChildrenClosure,
RenderingContextInterface $renderingContext
) {
$userData = $GLOBALS['TSFE']->fe_user->user;
return null !== $userData ? (int)$userData['uid'] : null;
}
}
如果您需要在您的 ViewHelper 中使用某些服务,事情会变得更加复杂,因为依赖注入不适用于已编译的 ViewHelper。您需要获取对象管理器,并使用对象管理器获取服务实例。
这可能看起来像这样,假设您想要使用 FrontendUserRepository
作为服务,因为您想要 return 整个用户对象,而不仅仅是用户 uid:
<?php
namespace Vendor\Extension\ViewHelpers;
use TYPO3\CMS\Core\Utility\GeneralUtility;
use TYPO3\CMS\Extbase\Domain\Repository\FrontendUserRepository;
use TYPO3\CMS\Extbase\Object\ObjectManager;
use TYPO3\CMS\Fluid\Core\ViewHelper\AbstractViewHelper;
class UserViewHelper extends AbstractViewHelper
{
/**
* @var FrontendUserRepository
*/
private static $frontendUserRepository = null;
public function render()
{
return static::renderStatic(
[],
$this->renderChildrenClosure,
$this->renderingContext
);
}
public static function renderStatic(
array $arguments,
\Closure $renderChildrenClosure,
RenderingContextInterface $renderingContext
) {
$userData = $GLOBALS['TSFE']->fe_user->user;
if (null === $userData) {
return null;
}
return static::getFrontendUserRepository()->findByUid((int)$userData['uid']);
}
private static function getFrontendUserRepository()
{
if (null === static::$frontendUserRepository) {
$objectManager = GeneralUtility::makeInstance(ObjectManager::class);
static::$frontendUserRepository = $objectManager->get(FrontendUserRepository::class);
}
return static::$frontendUserRepository;
}
}
免责声明:所有代码都是在没有实际 运行 的情况下编写的,因此其中存在错误。
如果你想 return 用户或用户在 viewhelper 中的 uid,只需 return 即可。
而不是
$this->view->assign('userIDTest', $userIDTest);
这样做
return $userIDTest;
在您的流体中,您可以以不同的方式使用用户变量。最简单的方法是使用 "alias" viewhelper:https://fluidtypo3.org/viewhelpers/fluid/master/AliasViewHelper.html
<f:alias map="{user: '{namespace:user()}'}">
{user.uid} {user.username}
</f:alias>