升级到TYPO3 8后,不会从数据库中获取数据

时间:2019-03-26 12:29:56

标签: php typo3 typo3-8.x

我已将项目从TYPO3 7.6升级到TYPO3 8.7。 UID变量{singleMember.uid}正在获取数据库并显示。但是,当我要获取{singleMember.name}{singleMember.email}时,即使数据库表中存在“名称”和“电子邮件”列,它也始终为空。

Controller / MemberController.php

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

Domain / Repository / MemberRepository.php

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

Domain / Model / 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 :(得分:0)

首先,代码的以下行之一在控制器中是多余的,因为第二行覆盖了第一个代码的结果:

$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. 名称空间可能丢失,它是文件中的第二行 通常看起来像这样:
    namespace Vendor\ExtensionName\Domain\Model;
    ,其中VendorExtensionName必须替换为您自己的值。

  2. 缺少注释,即使它们被注释为php-comments,也可用于验证字段。

因此,您的模型文件必须看起来像这样:

<?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;
    }

}

您的问题:

原因还不清楚,为什么对象从不返回所需的值,也因为您从未提供整个扩展的代码。
以下是一些可能的原因:

  1. 存储库类中的方法findAll()和/或findAllSorted被编码为仅返回每条记录的uid。这种情况不太可能发生,但我只提到它。
  2. 未在ext_tables.sqlConfiguration/TCA/tx_yourextension_domain_model_member.php中配置字段(将tx_ 您的扩展名 _...替换为您的值)。

其他原因可能是可以考虑的,但是也许您首先检查我提到的要点并提供反馈。如果需要,您可以提供更多信息,我可以扩大答案。