我已将项目从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;
}
}
有人知道我出了错吗?
答案 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();
}
模型类也仍然有两个问题:
名称空间可能丢失,它是文件中的第二行
通常看起来像这样:
namespace Vendor\ExtensionName\Domain\Model;
,其中Vendor
和ExtensionName
必须替换为您自己的值。
缺少注释,即使它们被注释为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;
}
}
您的问题:
原因还不清楚,为什么对象从不返回所需的值,也因为您从未提供整个扩展的代码。
以下是一些可能的原因:
findAll()
和/或findAllSorted
被编码为仅返回每条记录的uid。这种情况不太可能发生,但我只提到它。 ext_tables.sql
和Configuration/TCA/tx_yourextension_domain_model_member.php
中配置字段(将tx_ 您的扩展名 _...替换为您的值)。其他原因可能是可以考虑的,但是也许您首先检查我提到的要点并提供反馈。如果需要,您可以提供更多信息,我可以扩大答案。