2016-09-16 43 views
0

如何通過Viewhelper獲取並呈現FE用戶的uid?下面是通過控制器工作...但不是在Viewhelper中。區別在哪裏?我使用的是7.6.11,最後我想有FE用戶的用戶名和他的用戶組用戶名,並將其用於擴展名的html和一般的偏分數中。TYPO3 - 如何通過Viewhelper獲取FE UID

/typo3conf/EXT /擴展/類別/ 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> 

如所建議的通過迪米特里我取代

$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 /安裝)和刪除typo3temp ......現在它的工作後, !

+0

哪個TYPO3版本?在7.x及更高版本中,ViewHelpers被編譯,導致「render」方法只被調用一次(用於編譯)。之後,只調用「renderStatic」(一種靜態方法)。您可以覆蓋每次都會調用的「renderStatic」。當然,這個版本庫不會那麼容易獲得。 – Jost

+0

您好Jost ...我更新上面。我使用7.6.11。你能展示一個樣本嗎?有太多?在我身邊... –

+0

你只需要用戶標識或完整的用戶對象? ID使得它更容易,因爲不需要存儲庫。 – Jost

回答

1

如果你想返回viewhelper中的用戶或用戶的uid,只需返回它。

代替

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

做到這一點

return $userIDTest; 

在你的液體可以以不同的方式使用的用戶變量。最簡單的是使用「別名」viewhelper:https://fluidtypo3.org/viewhelpers/fluid/master/AliasViewHelper.html

<f:alias map="{user: '{namespace:user()}'}"> 
    {user.uid} {user.username} 
</f:alias> 
2

在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; 
    } 
} 

如果您需要在您的視圖助手使用一些服務,事情變得更加複雜,因爲依賴注入不會編譯ViewHelpers工作。您需要獲取對象管理器,並使用對象管理器獲取服務的實例。

這可能是這樣的,假設你想使用FrontendUserRepository爲服務,因爲要返回整個用戶對象,不僅是用戶的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; 
    } 
} 

免責聲明:所有代碼寫入時沒有實際運行它,因此存在錯誤。