После обновления до TYPO3 8 данные не извлекаются из базы данных - PullRequest
0 голосов
/ 26 марта 2019

Я обновил свой проект с TYPO3 7.6 до TYPO3 8.7. Переменная UID {singleMember.uid} извлекается из базы данных и отображается. Но когда я хочу получить {singleMember.name} или {singleMember.email}, он всегда пуст, хотя в таблице базы данных присутствуют столбцы «имя» и «адрес электронной почты».

Контроллер / MemberController.php

 public function listBeAction() {
 $members = $this->memberRepository->findAllSorted(array($sortField => $sortDir ));
 $members = $this->memberRepository->findAll();
 $this->view->assign('members', $members);
 }

Домен / Репозиторий / MemberRepository.php

 public function findAllSorted($sorting = NULL) {
 $query = $this->createQuery();
 $query->setOrderings($sorting);
 return $query->execute();
 }

Домен / модель / Member.php

class Member extends \TYPO3\CMS\Extbase\DomainObject\AbstractEntity {
 protected $name;
 protected $email;

public function getName() {
return $this->name;
}
public function setName($name) {
$this->name = $name;
}
public function getEmail() {
return $this->email;
}
public function setEmail($email) {
$this->email = $email;
}
}

Кто-нибудь знает, где я ошибся?

1 Ответ

0 голосов
/ 14 апреля 2019

Во-первых, одна из следующих строк вашего кода является излишней в вашем контроллере, потому что вторая перезаписывает результат первого:

$members = $this->memberRepository->findAllSorted(array($sortField => $sortDir ));
$members = $this->memberRepository->findAll();

Вторая проблема заключается в том, что вы могли просто забытьзаголовок в вашем вопросе, или вы поместили функцию в контроллер вместо хранилища, это относится, по крайней мере, к хранилищу:

public function findAllSorted($sorting = NULL) {
 $query = $this->createQuery();
 $query->setOrderings($sorting);
 return $query->execute();
 }

В классе модели все еще есть две проблемы:

  1. пространство имен может отсутствовать, обычно это 2-я строка в файле и выглядит так:
    namespace Vendor\ExtensionName\Domain\Model;
    , где Vendor и ExtensionName должны быть заменены на вашисобственные значения.

  2. Аннотации отсутствуют, они используются для проверки полей, даже если они помечены как php-комментарии.

Так что все вместефайл вашей модели должен выглядеть следующим образом:

<?php
namespace Vendor\ExtensionName\Domain\Model; // replace 'vendor' and 'ExtensionName' by your own values

class Member extends \TYPO3\CMS\Extbase\DomainObject\AbstractEntity
{

    /**
     * name
     * 
     * @var string
     */
    protected $name;

    /**
     * email
     * 
     * @var string
     * @validate EmailAddress
     *
     * @see \TYPO3\CMS\Extbase\Validation\Validator\AbstractValidator
     * @see https://docs.typo3.org/typo3cms/extensions/configuration_object/04-Administration/Validators/Index.html
     * @important never accepts umlauts in the complete email-address, validate it individually to allow those addresses!
     */
    protected $email;

    /**
     * Returns the name
     * 
     * @return string $name
     */
    public function getName()
    {
        return $this->name;
    }

    /**
     * Sets the name
     * 
     * @param string $name
     */
    public function setName($name)
    {
        $this->name = $name;
    }

    /**
     * Returns the email
     * 
     * @return string $email
     */
    public function getEmail()
    {
        return $this->email;
    }

    /**
     * Sets the email
     * 
     * @param string $email
     */
    public function setEmail($email)
    {
        $this->email= $email;
    }

}

На ваш вопрос:

Причины совершенно неясны, почему объекты никогда не возвращают желаемые значения, в том числе и потому, чтоты никогда не прovided код всего расширения.
Вот разумные причины:

  1. Методы findAll() и / или findAllSorted в классе репозитория кодируются так, чтобы возвращать только uid каждой записи,Этот случай маловероятен, но я просто упомянул об этом.
  2. Поля не настроены в ext_tables.sql и Configuration/TCA/tx_yourextension_domain_model_member.php (замените tx_ yourextension _... на ваше значение).

Возможны другие причиныподумайте, но, возможно, вы сначала проверите пункты, которые я упомянул, и дадите отзыв.При необходимости вы можете дать больше информации, а я могу расширить свой ответ.

...