【发布时间】:2013-11-26 22:06:09
【问题描述】:
为什么在创建新记录时我的用户和优惠券对象不会保存到数据库中?
我正在使用typo3 v 4.5.30 并做了一个小扩展(我的第一个)来管理一些优惠券。当我创建优惠券时,我会保存创建者(前端用户)并将其正确保存到数据库中。但是当我为优惠券用户做同样的事情时,该用户(和优惠券)不会保存到数据库中。考虑这段代码片段,它试图将用户和优惠券保存在 usedcoupon 表中。 usedcoupon 表基本上只有 2 列,一列用于用户,一列用于优惠券。
为了获得一个 usedcoupon 对象,我调用了 objectmanagers create 方法。我已经拥有的用户和优惠券对象在我 var_dump 时看起来正确。即使我从 usedcoupon 对象中获取它们,它们看起来还不错,但即使创建了新记录,它们也不会保存到数据库中。此代码在我的 CouponController 中的一个操作方法中。
$used = $this->objectManager>create('Tx_BpsCoupons_Domain_Model_UsedCoupon');
$used->setCoupon($coupon);
$used->setUser($user);
$used->setGuest("myemail@ddd.com");
$userx = $used->getUser();
$coupx = $used->getCoupon();
/// var_dumps of userx and coupx show good objects
$this->usedCouponRepository->add($used);
//after this I can examine the db and see the new record but the user and coupon fields are empty, and no errors are seen
谢谢
PS 这是我来自 Usedcoupon.php 的 TCA
<?php
if (!defined ('TYPO3_MODE')) {
die ('Access denied.');
}
$TCA['tx_bpscoupon_domain_model_usedcoupon'] = array(
'ctrl' => $TCA['tx_bpscoupon_domain_model_usedcoupon']['ctrl'],
'interface' => array(
'showRecordFieldList' => 'sys_language_uid, l10n_parent, l10n_diffsource, hidden, user, coupon, guest',
),
'types' => array(
'1' => array('showitem' => 'sys_language_uid;;;;1-1-1, l10n_parent, l10n_diffsource, hidden;;1, user, coupon, guest,--div--;LLL:EXT:cms/locallang_ttc.xml:tabs.access,starttime, endtime'),
),
'palettes' => array(
'1' => array('showitem' => ''),
),
'columns' => array(
'sys_language_uid' => array(
'exclude' => 1,
'label' => 'LLL:EXT:lang/locallang_general.xml:LGL.language',
'config' => array(
'type' => 'select',
'foreign_table' => 'sys_language',
'foreign_table_where' => 'ORDER BY sys_language.title',
'items' => array(
array('LLL:EXT:lang/locallang_general.xml:LGL.allLanguages', -1),
array('LLL:EXT:lang/locallang_general.xml:LGL.default_value', 0)
),
),
),
'l10n_parent' => array(
'displayCond' => 'FIELD:sys_language_uid:>:0',
'exclude' => 1,
'label' => 'LLL:EXT:lang/locallang_general.xml:LGL.l18n_parent',
'config' => array(
'type' => 'select',
'items' => array(
array('', 0),
),
'foreign_table' => 'tx_bpscoupon_domain_model_usedcoupon',
'foreign_table_where' => 'AND tx_bpscoupon_domain_model_usedcoupon.pid=###CURRENT_PID### AND tx_bpscoupon_domain_model_usedcoupon.sys_language_uid IN (-1,0)',
),
),
'l10n_diffsource' => array(
'config' => array(
'type' => 'passthrough',
),
),
't3ver_label' => array(
'label' => 'LLL:EXT:lang/locallang_general.xml:LGL.versionLabel',
'config' => array(
'type' => 'input',
'size' => 30,
'max' => 255,
)
),
'hidden' => array(
'exclude' => 1,
'label' => 'LLL:EXT:lang/locallang_general.xml:LGL.hidden',
'config' => array(
'type' => 'check',
),
),
'starttime' => array(
'exclude' => 1,
'l10n_mode' => 'mergeIfNotBlank',
'label' => 'LLL:EXT:lang/locallang_general.xml:LGL.starttime',
'config' => array(
'type' => 'input',
'size' => 13,
'max' => 20,
'eval' => 'datetime',
'checkbox' => 0,
'default' => 0,
'range' => array(
'lower' => mktime(0, 0, 0, date('m'), date('d'), date('Y'))
),
),
),
'endtime' => array(
'exclude' => 1,
'l10n_mode' => 'mergeIfNotBlank',
'label' => 'LLL:EXT:lang/locallang_general.xml:LGL.endtime',
'config' => array(
'type' => 'input',
'size' => 13,
'max' => 20,
'eval' => 'datetime',
'checkbox' => 0,
'default' => 0,
'range' => array(
'lower' => mktime(0, 0, 0, date('m'), date('d'), date('Y'))
),
),
),
'user' => array(
'exclude' => 0,
'label' => 'LLL:EXT:bpscoupon/Resources/Private/Language/locallang_db.xml:tx_bpscoupon_domain_model_usedcoupon.user',
'config' => array(
'type' => 'select',
'foreign_table' => 'fe_users'
),
),
'coupon' => array(
'exclude' => 0,
'label' => 'LLL:EXT:bpscoupon/Resources/Private/Language/locallang_db.xml:tx_bpscoupon_domain_model_usedcoupon.coupon',
'config' => array(
'type' => 'select',
'foreign_table' => 'tx_bpscoupons_domain_model_coupon'
),
),
'guest' => array(
'exclude' => 0,
'label' => 'LLL:EXT:bpscoupon/Resources/Private/Language/locallang_db.xml:tx_bpscoupon_domain_model_usedcoupon.guest',
'config' => array(
'type' => 'input',
'size' => 30,
'eval' => 'trim'
),
),
),
);
?>
PPS添加usedcoupon型号代码:
<?php
/***************************************************************
* Copyright notice
*
* (c) 2013 Cory Taylor <cory@bigplayersystems.com>, Big Player Systems
*
* All rights reserved
*
* This script is part of the TYPO3 project. The TYPO3 project is
* free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 3 of the License, or
* (at your option) any later version.
*
* The GNU General Public License can be found at
* http://www.gnu.org/copyleft/gpl.html.
*
* This script is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* This copyright notice MUST APPEAR in all copies of the script!
***************************************************************/
/**
*
*
* @package bps_coupons
* @license http://www.gnu.org/licenses/gpl.html GNU General Public License, version 3 or later
*
*/
class Tx_BpsCoupons_Domain_Model_UsedCoupon extends Tx_Extbase_DomainObject_AbstractEntity {
/**
* Used By
*
* @var Tx_BpsCoupons_Domain_Model_FrontendUser
*/
protected $user;
/**
* Returns the $user
*
* @return Tx_BpsCoupons_Domain_Model_FrontendUser $user
*/
public function getUser() {
echo "<br/>" . __FUNCTION__ . __LINE__ . " <br/>";
return $this->user;
}
/**
* Sets the $user
*
* @param @param Tx_BpsCoupons_Domain_Model_FrontendUser $user
* @return void
*/
public function setUser(Tx_BpsCoupons_Domain_Model_FrontendUser $user) {
$this->user = $user;
}
/**
* the used coupon
*
* @var Tx_BpsCoupons_Domain_Model_Coupon
*/
protected $coupon;
/**
* Returns the $coupon
*
* @return Tx_BpsCoupons_Domain_Model_Coupon $coupon
*/
public function getCoupon() {
return $this->coupon;
}
/**
* Sets the $coupon
*
* @param @param Tx_BpsCoupons_Domain_Model_Coupon $coupon
* @return void
*/
public function setCoupon(Tx_BpsCoupons_Domain_Model_Coupon $coupon) {
$this->coupon = $coupon;
}
/**
* the guest email
*
* @var string
*/
protected $guest;
/**
* Returns the $guest
*
* @return string $guest
*/
public function getGuest() {
return $this->guest;
}
/**
* Sets the $guest email
*
* @param string $guest
* @return void
*/
public function setGuest( $guest) {
$this->guest = $guest;
}
}
?>
PPPS:我尝试为电子邮件地址添加一个基本文本字段,但结果它们也没有保存。我原以为问题在于用户和优惠券文件是对其他表中行的引用,但现在事实证明更简单的东西也没有保存。
PP PP S:不妨也看看我的 ext_tables 文件:
<?php
if (!defined('TYPO3_MODE')) {
die ('Access denied.');
}
Tx_Extbase_Utility_Extension::registerPlugin(
$_EXTKEY,
'Bpscoupons',
'BPS_Coupons'
);
t3lib_extMgm::addStaticFile($_EXTKEY, 'Configuration/TypoScript', 'BPS_Coupons');
t3lib_extMgm::addLLrefForTCAdescr('tx_bpscoupons_domain_model_coupon', 'EXT:bps_coupons/Resources/Private/Language/locallang_csh_tx_bpscoupons_domain_model_coupon.xml');
t3lib_extMgm::allowTableOnStandardPages('tx_bpscoupons_domain_model_coupon');
$TCA['tx_bpscoupons_domain_model_coupon'] = array(
'ctrl' => array(
'title' => 'LLL:EXT:bps_coupons/Resources/Private/Language/locallang_db.xml:tx_bpscoupons_domain_model_coupon',
'label' => 'name',
'tstamp' => 'tstamp',
'crdate' => 'crdate',
'cruser_id' => 'cruser_id',
'dividers2tabs' => TRUE,
'sortby' => 'sorting',
'versioningWS' => 2,
'versioning_followPages' => TRUE,
'origUid' => 't3_origuid',
'languageField' => 'sys_language_uid',
'transOrigPointerField' => 'l10n_parent',
'transOrigDiffSourceField' => 'l10n_diffsource',
'delete' => 'deleted',
'enablecolumns' => array(
'disabled' => 'hidden',
'starttime' => 'starttime',
'endtime' => 'endtime',
),
'searchFields' => 'name,description,expiry,hall,date_created,creator,barcode,',
'dynamicConfigFile' => t3lib_extMgm::extPath($_EXTKEY) . 'Configuration/TCA/Coupon.php',
'iconfile' => t3lib_extMgm::extRelPath($_EXTKEY) . 'Resources/Public/Icons/tx_bpscoupons_domain_model_coupon.gif'
),
);
t3lib_extMgm::addLLrefForTCAdescr('tx_bpscoupons_domain_model_usedcoupon', 'EXT:bpscoupons/Resources/Private/Language/locallang_csh_tx_bpscoupons_domain_model_usedcoupon.xml');
t3lib_extMgm::allowTableOnStandardPages('tx_bpscoupons_domain_model_usedcoupon');
$TCA['tx_bpscoupons_domain_model_usedcoupon'] = array(
'ctrl' => array(
'title' => 'LLL:EXT:bpscoupons/Resources/Private/Language/locallang_db.xml:tx_bpscoupons_domain_model_usedcoupon',
'label' => 'user',
'tstamp' => 'tstamp',
'crdate' => 'crdate',
'cruser_id' => 'cruser_id',
'dividers2tabs' => TRUE,
'versioningWS' => 2,
'versioning_followPages' => TRUE,
'origUid' => 't3_origuid',
'languageField' => 'sys_language_uid',
'transOrigPointerField' => 'l10n_parent',
'transOrigDiffSourceField' => 'l10n_diffsource',
'delete' => 'deleted',
'enablecolumns' => array(
'disabled' => 'hidden',
'starttime' => 'starttime',
'endtime' => 'endtime',
),
'searchFields' => 'user,coupon,guest,',
'dynamicConfigFile' => t3lib_extMgm::extPath($_EXTKEY) . 'Configuration/TCA/Usedcoupon.php',
'iconfile' => t3lib_extMgm::extRelPath($_EXTKEY) . 'Resources/Public/Icons/tx_bpscoupons_domain_model_usedcoupon.gif'
),
);
?>
【问题讨论】:
-
您在 usedCoupons 表中的字段是否有适当的 TCA 配置?
-
可能不是,但我尝试对其进行调整,我无法将其添加到扩展程序构建器中的扩展程序中,因为每当我尝试保存时都会崩溃。所以我在一个新的扩展中制作了模型并试图复制它。我会用 TCA 更新我的 Q。
-
在 Q 中稍微更新了我的 TCA。但仍然无法正常工作。直到明天...
-
最好向我们展示您的
Tx_BpsCoupons_Domain_Model_UsedCoupon -
就像一般评论:你认为有必要有一个模型“coupon”和“usedCoupon”吗?只有一个带有已使用布尔值或已使用日期和“已使用用户”的模型“优惠券”不是更好吗?
标签: database repository typo3 record extbase