typo3 - Extbase 对象的属性在 FLUID 中返回 NULL,但仅在直接调用时
问题描述
我面临一个非常奇怪的问题:在 FLUID 中调试具有所有属性的对象时。当试图直接调用某些属性时,它们会显示它们的值。但在某些属性上,该值为 NULL,但仅在直接调用时。例如 {addresses.0.lastname} 显示姓氏,但 {addresses.0.lng} 不显示“lng”的值,尽管在调用 {addresses} 时有一个值!?
ext_tables.sql:
CREATE TABLE tx_pngooglemap_domain_model_address (
uid int(11) NOT NULL auto_increment,
....
firstname varchar(255) DEFAULT '' NOT NULL,
lastname varchar(255) DEFAULT '' NOT NULL,
....
lat varchar(255) DEFAULT '' NOT NULL,
lng varchar(255) DEFAULT '' NOT NULL,
notes text DEFAULT '' NOT NULL,
模型:
class Address extends \TYPO3\CMS\Extbase\DomainObject\AbstractEntity
{
/**
* firstname
*
* @var string
* @validate NotEmpty
*/
protected $firstname = '';
/**
* lastname
*
* @var string
* @validate NotEmpty
*/
protected $lastname = '';
/******************* some more properties ***/
/**
* lat
*
* @var string
* @validate NotEmpty
*/
protected $lat = '';
/**
* lng
*
* @var string
* @validate NotEmpty
*/
protected $lng = '';
/**
* Returns the firstname
*
* @return string $firstname
*/
public function getFirstname()
{
return $this->firstname;
}
/**
* Sets the firstname
*
* @param string $firstname
* @return void
*/
public function setFirstname($firstname)
{
$this->firstname = $firstname;
}
/**
* Returns the lastname
*
* @return string $lastname
*/
public function getLastname()
{
return $this->lastname;
}
/**
* Sets the lastname
*
* @param string $lastname
* @return void
*/
public function setLastname($lastname)
{
$this->lastname = $lastname;
}
/******************* some more getters and setters for properties ***/
/**
* Returns the lat
*
* @return string $lat
*/
public function getLat()
{
return $lat->lat;
}
/**
* Sets the lat
*
* @param string $lat
* @return void
*/
public function setLat($lat)
{
$this->lat = $lat;
}
/**
* Returns the lng
*
* @return string $lng
*/
public function getLng()
{
return $lng->lng;
}
/**
* Sets the lng
*
* @param string $lng
* @return void
*/
public function setLng($lng)
{
$this->lng = $lng;
}
}
tca.php:
'lastname' => [
'exclude' => true,
'label' => 'LLL:EXT:pngooglemap/Resources/Private/Language/locallang_db.xlf:tx_pngooglemap_domain_model_address.lastname',
'config' => [
'type' => 'input',
'size' => 30,
'eval' => 'trim,required'
],
],
'lat' => [
'exclude' => true,
'label' => 'LLL:EXT:pngooglemap/Resources/Private/Language/locallang_db.xlf:tx_pngooglemap_domain_model_address.latitude',
'config' => [
'type' => 'input',
'size' => 30,
'eval' => 'trim'
]
],
'lng' => [
'exclude' => true,
'label' => 'LLL:EXT:pngooglemap/Resources/Private/Language/locallang_db.xlf:tx_pngooglemap_domain_model_address.longitude',
'config' => [
'type' => 'input',
'size' => 30,
'eval' => 'trim'
]
],
控制器:
public function listAction()
{
$addresses = $this->addressRepository->findAll();
$this->view->assign('addresses', $addresses);
}
列表.html:
<html xmlns:f="http://typo3.org/ns/TYPO3/CMS/Fluid/ViewHelpers" data-namespace-typo3-fluid="true">
<f:layout name="Default" />
<f:section name="main">
<f:debug>{addresses.0}</f:debug> => shows all fields with their values
<f:debug>{addresses.0.lastname}</f:debug> => shows the lastname
<f:debug>{addresses.0.lng}</f:debug> => shows "NULL" instead of "48.45673"
</f:section>
</html>
解决方案
问题return $lng->lng;
出在你的getLng
函数中。这应该是return $this->lng;
addresses.0
直接显示属性的调试。addresses.0.lng
使用该getLng
功能。
推荐阅读
- git - 如果 git commit IDs 是 SHA-1 输出,而 SHA-1 产生 160 位输出,为什么 git commit IDs 是 320 位?
- java - Mongo Java Driver - 如何使用部分索引创建复合索引?
- c++ - 链表:如何实现析构函数、复制构造函数和复制赋值运算符?
- loops - 有没有办法在python中把它放在一个优雅的循环中?
- mongodb - 如何从 MongoDB 实例中获取所有字段名称和数据类型
- javascript - 递归 setTimeout 在 v8 中最大化 CPU
- google-cloud-platform - 如何删除 BigQuery 中属于嵌套列的列
- javascript - 导入 LocalBase 库
- docker - 在詹金斯中配置章鱼可执行路径的问题
- javascript - 将键盘快捷键添加到自行创建的 Chrome 扩展程序