【问题标题】:TYPO3 Extbase fe_user UID in own modelTYPO3 Extbase fe_user UID 在自己的模型中
【发布时间】:2014-09-27 15:59:25
【问题描述】:

我在 TYPO3 6.2 中创建了一个 extbase 插件。在一个表中,我有一个字段“fuid”,我想在其中存储 fe_users uid,以了解哪个用户可以编辑此记录。

我在 createAction 中设置了“fuid”:

$newLocation->setFuID((int) $GLOBALS['TSFE']->fe_user->user['uid']);

这项工作。在数据库中是正确的 UID。

但在editAction中:

$location->getFuID()
returns null

为什么?

TCA:

fu_i_d' => array(
            'exclude' => 1,
            'label' => 'LLL:EXT:pitss24/Resources/Private/Language/locallang_db.xlf:tx_pitss24_domain_model_location.fu_i_d',
            'config' => array(
                'type' => 'select',
                'items' => array (
                        array('',0),
                ),
                'foreign_table' => 'fe_users',
                'foreign_class' => '\TYPO3\CMS\Extbase\Domain\Model\FrontendUser',
                'minitems' => 0,
                'maxitems' => 1,
                'size' => 10,
                'appearance' => array(
                    'collapseAll' => 0,
                    'levelLinksPosition' => 'top',
                    'showSynchronizationLink' => 1,
                    'showPossibleLocalizationRecords' => 1,
                    'showAllLocalizationLink' => 1
                ),
            ),
        ),

在后端/TYPO3 一切正常!

【问题讨论】:

    标签: typo3 fluid extbase


    【解决方案1】:

    在模型文件中。

    /**
     * feuseruid
     *
     * @var \TYPO3\CMS\Extbase\Domain\Model\FrontendUser
     */
    protected $feuseruid;
    
    // GET and SET Methods
    
    /**
     * Returns the feuseruid
     *
     * @return \TYPO3\CMS\Extbase\Domain\Model\FrontendUser feuseruid
     */
    public function getFeuseruid() {
         return $this->feuseruid;
    }
    
    /*
     * Sets the feuseruid
     *
     * @param string $feuseruid
     * @return \TYPO3\CMS\Extbase\Domain\Model\FrontendUser feuseruid
     */
    public function setFeuseruid(\TYPO3\CMS\Extbase\Domain\Model\FrontendUser $feuseruid) {
         $this->feuseruid = $feuseruid;
    }
    

    在 TCA 文件中

    'feuseruid' => array(
        'exclude' => 1,
        'label' => 'Feuser Id',
        'config' => array(
            'type' => 'inline',
            'foreign_table' => 'fe_users',
            'minitems' => 0,
            'maxitems' => 1,
            'appearance' => array(
                'collapseAll' => 0,
                'levelLinksPosition' => 'top',
                'showSynchronizationLink' => 1,
                'showPossibleLocalizationRecords' => 1,
                'showAllLocalizationLink' => 1
            ),
        ),
    ),
    

    在 Sql.php 中

    feuseruid int(11) unsigned DEFAULT '0' NOT NULL,
    

    在控制器中

    /**
     * User Repository
     *
     * @var \TYPO3\CMS\Extbase\Domain\Repository\FrontendUserRepository
     * @inject
     */
    protected $userRepository;
    
    $userObject = $this->userRepository->findByUid($GLOBALS['TSFE']->fe_user->user['uid']);
    $orders->setFeuseruid($userObject);
    $this->yourRepository->add($orders);
    

    【讨论】:

      【解决方案2】:

      我发现了错误! extensionBuilder 在 Model 中写入了错误的 Data:

      正确的值是:

      型号:

      /*
       *
       * @var TYPO3\CMS\Extbase\Domain\Model\FrontendUser
       */
      protected $fuID = NULL;
      
      ...
      ...
      ...
      
      /**
       * Returns the fuID
       *
       * @return TYPO3\CMS\Extbase\Domain\Model\FrontendUser fuID
       */
      public function getFuID() {
          return $this->fuID;
      }
      
      /*
       * Sets the fuID
       *
       * @param string $fuID
       * @return TYPO3\CMS\Extbase\Domain\Model\FrontendUser fuID
       */
      public function setFuID(TYPO3\CMS\Extbase\Domain\Model\FrontendUser $fuID) {
          $this->fuID = $fuID;
      }
      

      控制器:

      /**
           * User Repository
           *
           * @var \TYPO3\CMS\Extbase\Domain\Repository\FrontendUserRepository
           * @inject
           */
          protected $userRepository;
      
          /**
           * Den aktuell angemeldeten User auslesen
           *
           * @return \TYPO3\CMS\Extbase\Domain\Repository\FrontendUserRepository
           */
          public function getCurrentUser() {
              if ($this->currentUser == NULL && $GLOBALS['TSFE']->fe_user->user['uid'] > 0) {
                  $this->currentUser = $this->userRepository->findByUid($GLOBALS['TSFE']->fe_user->user['uid']);
              }
      
              return $this->currentUser;  
          }
      

      【讨论】:

        【解决方案3】:

        如果没有适当的模型视图,很难说。您的模型和 TCA 之间很可能不匹配:一方面您使用的是整数 (setFuID()),另一方面您有一个对象 (foreign_table/foreign_class)。也许在您将其调整为相同之后它就可以工作了。

        【讨论】:

        • $location 的受保护值也为空。它不会从数据库中加载值。我不知道为什么 extensionBuilder 有时将函数命名为 fuid 但 mysql 字段是 fu_i_d,两者的映射在哪里?
        • 如果遵循编码约定,映射会自动发生(在正常情况下)。 lowerCamelCase get 转换为 lower_cased_underscored (lowerCase => lower_case),反之亦然。
        • 您需要什么信息?我在这个扩展的另一个插件上也有同样的错误。大多数东西都是扩展管理器的默认设置。我不知道在哪里可以找到这个错误。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-17
        相关资源
        最近更新 更多