#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