gpt4 book ai didi

typo3 - Extbase 在数据库中存储空值

转载 作者:行者123 更新时间:2023-12-01 09:51:21 32 4
gpt4 key购买 nike

我正在尝试创建一个对象,但值没有存储到数据库中。这是在“索引”操作上完成的,因为插件是通过 TypoScript 插入的,实际上并不创建输出。所以在调用 Action 时没有给出对象,这就是为什么我自己创建它。

$stat = new Tx_MyExt_Domain_Model_Stat;
$stat->setSubscriberId($_COOKIE['statid']);
$stat->setDomain($_SERVER['HTTP_HOST']);
$stat->setRequestUri($_SERVER['REQUEST_URI']);

$this->statRepository = t3lib_div::makeInstance('Tx_myExt_Domain_Repository_StatRepository');
$this->statRepository->add($stat);

执行 var_dump($stat) 得到以下结果:

object(Tx_MyExt_Domain_Model_Stat)#191 (9) {
["subscriber_id":protected]=>
string(1) "2"
["domain":protected]=>
string(22) "test.localhost.example"
["request_uri":protected]=>
string(26) "/testpage/index.php?id=2"
["uid":protected]=>
NULL
["_localizedUid":protected]=>
NULL
["_languageUid":protected]=>
NULL
["pid":protected]=>
NULL
["_isClone":"Tx_Extbase_DomainObject_AbstractDomainObject":private]=>
bool(false)
["_cleanProperties":"Tx_Extbase_DomainObject_AbstractDomainObject":private]=>
NULL
}

所以这看起来像是正确分配了值。但是当查看数据库时,我得到了这个:

uid    pid    subscriber_id    domain    request_uri    crdate  
13 0 0 NULL NULL 1328176026

存储库:

class Tx_MyExt_Domain_Repository_StatRepository extends Tx_Extbase_Persistence_Repository
{}

型号:

class Tx_MyExt_Domain_Model_Stat extends Tx_Extbase_DomainObject_AbstractEntity 
{

/**
* @var int
* @dontvalidate
*/
protected $subscriber_id = 0;

/**
* @var string
* @dontvalidate
*/
protected $domain = '';

/**
* @var string
* @dontvalidate
*/
protected $request_uri = '';



/**
* @param int $susbcriber_id Subscriber id
* @return void
*/
public function setSubscriberId($subscriber_id)
{
$this->subscriber_id = $subscriber_id;
}

/**
* @return int Susbcriber id
*/
public function getSubscriberId()
{
return $this->subscriber_id;
}

/**
* @param string $domain Domain
* @return void
*/
public function setDomain($domain)
{
$this->domain = $domain;
}

/**
* @return string Domain
*/
public function getDomain()
{
return $this->domain;
}

/**
* @param string $request_uri Request URI
* @return void
*/
public function setRequestUri($request_uri)
{
$this->request_uri = $request_uri;
}

/**
* @return string Request URI
*/
public function getRequestUri()
{
return $this->request_uri;
}

}

有人可以告诉我这里可能有什么问题吗?

最佳答案

调试了整个extbase过程。似乎在 typo3/sysext/extbase/Classes/Persistence/Backend.php 中,属性在这一行被跳过:

if (!$dataMap->isPersistableProperty($propertyName) || $this->propertyValueIsLazyLoaded($propertyValue)) continue;

这是因为 $dataMap->isPersistableProperty($propertyName) 没有返回任何东西。调查 typo3/sysext/extbase/Classes/Persistence/Mapper,有:

/**
* Returns TRUE if the property is persistable (configured in $TCA)
*
* @param string $propertyName The property name
* @return boolean TRUE if the property is persistable (configured in $TCA)
*/
public function isPersistableProperty($propertyName) {
return isset($this->columnMaps[$propertyName]);
}

所以解决方案非常简单:创建一个有效的 TCA。我没有一个(或太简约),因为我正在使用的表不会显示在后端。

关于typo3 - Extbase 在数据库中存储空值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9110272/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com