Extbase: измененный объект неправильно сохраняется в репозитории

#php #typo3 #extbase #typo3-7.6.x #typo3-extensions

#php #typo3 #extbase #typo3-7.6.x #typo3-расширения

Вопрос:

Я использую TYPO3 7.6.10 и создаю свое первое расширение.

Я хочу добавить свойство к своему объекту в функции createAction моего контроллера. Но изменения не сохраняются.

Вот мой код:

 /**
 * action create
 *
 * @param Typo3LpSurveyDomainModelSigil $newSigil
 * @param array $answers
 * @internal param Survey $newSurvey
 */
public function createAction(Sigil $newSigil, Array $answers)
{
    $newSurvey = $this->objectManager->get('Typo3LpSurveyDomainModelSurvey');
    $this->userID = $GLOBALS['TSFE']->fe_user->user['uid'];

    //this modifications are saved
    foreach ($answers as $key => $answer) {
        $newSurveyItem = $this->objectManager->get('Typo3LpSurveyDomainModelSurveyItem');

        $newSurveyItem->setQuestionId($key);
        $newSurveyItem->setValue($answer);

        $newSurvey->addAnswer($newSurveyItem);
    }


    //BUT this modification is not saved
    $newSigil->setUserID($this->userID);

    $newSigil->setSurvey($newSurvey);

    $this->sigilRepository->add($newSigil);

    $this->redirect('list');
}
  

Если я отлаживаю свой объект $newSigil , идентификатор пользователя устанавливается, но после добавления в репозиторий значение по умолчанию будет сохранено.

Я не понимаю, почему. Я также пытаюсь сохранить вручную следующий код, но решения нет:

 /**
 * @var typo3CMSExtbasePersistenceGenericPersistenceManager
 * @inject
 */
protected $persistenceManager;

public function createAction(Sigil $newSigil, Array $answers)
{
    $newSurvey = $this->objectManager->get('Typo3LpSurveyDomainModelSurvey');
    $this->userID = $GLOBALS['TSFE']->fe_user->user['uid'];


    foreach ($answers as $key => $answer) {
        $newSurveyItem = $this->objectManager->get('Typo3LpSurveyDomainModelSurveyItem');

        $newSurveyItem->setQuestionId($key);
        $newSurveyItem->setValue($answer);

        $newSurvey->addAnswer($newSurveyItem);
    }



    $newSigil->setUserID($this->userID);
    $newSigil->setSurvey($newSurvey);

    $this->persistenceManager->persistAll();

    $this->sigilRepository->add($newSigil);

    $this->redirect('list');
}
  

Надеюсь, вопрос понятен

С наилучшими пожеланиями, Феликс

Комментарии:

1. В вашем коде есть функция persistAll() перед добавлением() объекта. Попробуйте поменять его местами. Если он все еще не работает, с объектом что-то не так. Отлаживайте объект $newSigil вместо перенаправления в listAction().

2. Я пробовал как до, так и после, но решения нет. Но мы уже нашли решение

3. Я знаю, что это старый вопрос, но каково было решение?

Ответ №1:

Может быть, идентификатор пользователя указан неправильно? Если ваше поле базы данных вызывается user_id , ваше свойство для домена должно userId . Только если ваше поле базы данных вызывается user_i_d , оно должно userID .

Комментарии:

1. Большое вам спасибо! Но ошибка была не в контроллере, а в моем объекте модели домена. 🙂

2. вот почему я написал «свойство для домена» 😉

3. О, извините, я пропустил это xD