2014-09-27 2 views
1

Я создаю модуль extbase в TYPO3 6.2. В одной таблице у меня есть поле «fuid», где я хочу сохранить fe_users uid, чтобы узнать, какой пользователь может редактировать эту запись.TYPO3 Extbase fe_user UID в собственной модели

Я установил "fuid" в createAction:

$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 
       ), 
      ), 
     ), 

В Backend/TYPO3 все ОК!

ответ

1

Я нашел ошибку! ExtensionBuilder пишет неправильные данные в модели:

правильные значения:

Модель:

/* 
* 
* @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; 
    } 
0

Трудно сказать без соответствующего вида вашей модели. Очень вероятно, что у вас есть несоответствие между вашей моделью и вашим TCA: с одной стороны, вы используете целое число (setFuID()), с другой стороны, у вас есть объект (foreign_table/foreign_class). Возможно, он работает после того, как вы скорректировали это, чтобы быть тем же самым.

+0

защищаемая стоимость от $ места является недействительной тоже. Он не загружает значение из базы данных. Я не знаю, почему extensionBuilder назвал иногда функции fuid, но поле mysql - fu_i_d, а где - отображение из обоих? – Burner

+1

Картирование происходит (при нормальных обстоятельствах) автоматически, если соблюдается конвенция кодирования. lowerCamelCase get преобразуется в lower_cased_underscored (lowerCase => lower_case) и наоборот. – RoyalKnight

+0

Что вам нужно для информации? У меня такая же ошибка и на другом плагине из этого расширения. Большинство настроек по умолчанию - от менеджера расширений. У меня нет идеи, где я могу найти эту ошибку. – Burner

2

В файле модели.

/** 
* 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); 
Смежные вопросы