Установите sys_language_uid в командном контроллере extbase.

У меня есть командный контроллер (импортер), запускаемый планировщиком, который должен сохранять данные как таковые:

foreach ($items as $item){
  // store it
  $entry = $this->objectManager->get('STUBR\Importer\Domain\Model\Item');
  $entry->setTitle($item['Title']);
  $entry->setData(json_encode($item));
  // manually set the storage page (defined in scheduler form)
  $entry->setPid($itemStoragePid); // works
  // manually set the language (defined in scheduler form)
  // EDIT
  // $entry->setSysLanguageUid = -1; // had typo
  $entry->set_languageUid(-1); // works
  // END EDIT
  $this->itemRepository->add($entry);
}

Хотя в модели не установлены ни pid, ни sys_language_uid, setPid ведет себя так, как ожидалось, а setSysLanguageUid — нет.

Я знаю, что что-то не так с setSysLanguageUid() в extbase (https://forge.typo3.org/issues/45873), хотя я не смог полностью понять проблему.

Как вручную сохранить в столбце sys_language_uid?

PS: я пробовал модель Extbase: setSysLanguageUid не работает, но, вероятно, я пропустил что-нибудь


person Urs    schedule 08.06.2016    source источник


Ответы (1)


Решено, у меня была опечатка выше

Решение от @Chi на https://stackoverflow.com/a/33798615/160968

/**
 * languageUid
 * @var int
 */
protected $languageUid;

/**
 * @param int $languageUid
 * @return void
 */
public function setLanguageUid($languageUid) {
    $this->languageUid = $languageUid;
}

/**
 * @return int
 */
public function getLanguageUid() {
    return $this->languageUid;
}

А потом $entry->setLanguageUid(-1);

person Urs    schedule 08.06.2016
comment
Я бы сказал, что это setLanguageUid, чтобы придерживаться соглашения;) - person pdu; 25.10.2016
comment
Ах, я думал, что подчеркивание имеет какую-то скрытую функциональность! То есть вы имеете в виду сохранить геттеры/сеттеры, но назвать их условно? - person Urs; 25.10.2016
comment
Да. И для тех, кто думает, что это решение не работает... оно работает для установки sys_language_uid, но может не сохраняться как таковое в базе данных из-за преобразователя данных. - person pdu; 26.10.2016
comment
Это больше не работает для меня. Я специально запрашиваю у extbase объект на заданном языке, $query-›equals('sysLanguageUid',5), но extbase возвращает язык по умолчанию. Любое обновление о том, как это использовать? - person j4k3; 02.03.2018
comment
Вы используете $query->matching() вокруг $query->equals(), верно? Просто спрашиваю, потому что я только что узнал об этом. Я искал код на своих сайтах и ​​нашел его в установке TYPO3 7. Ваш больше не относится к 8.x? - person Urs; 02.03.2018