【问题标题】:TYPO3 Extbase: persisting domain model with datetime propertyTYPO3 Extbase:具有日期时间属性的持久域模型
【发布时间】:2015-08-11 20:42:46
【问题描述】:

我真的被困在这里(也许疾病没有帮助......)。

设置: - 带有相应 extbase 和流体的typo3 6.2 - 检查了大约 20 个博客条目、官方文档和我找到的一些代码 sn-ps - 开发 TYPO3 的资深人士,但对 extbase/fluid 相对较新

目标: 和你们中的许多人一样,我尝试在前端实现一个表单来创建一个新对象。该对象包含一些日期时间属性。

症状: - 我可以在后端创建一个对象,并通过流畅的创建列表正确地输出它并从中获得一些乐趣,到目前为止没有问题。 - 填写表格时,我收到众所周知的 FlashErrorMessage “尝试调用时发生错误” - 在对给出错误的表单字段进行样式设置后(使用 f3-form-error css-class),我可以将 datetime 属性的输入字段确定为坏人。

tca 摘录:

'startdate' => array(
    'label' => 'LLL:EXT:ngibmembers/Resources/Private/Language/locallang_db.xlf:paymentperiod.startdate',
    'config' => array(
        'type' => 'input',
        'size' => 30,
        'eval' => 'date',
    ),
),
'stopdate' => array(
    'label' => 'LLL:EXT:ngibmembers/Resources/Private/Language/locallang_db.xlf:paymentperiod.stopdate',
    'config' => array(
        'type' => 'input',
        'size' => 30,
        'eval' => 'date',
    ),
),

然后是领域模型部分:

/**
 * startdate
 *
 * @var \DateTime
 * @validate DateTime
 */
protected $startdate;

/**
 * stopdate
 *
 * @var \DateTime
 * @validate DateTime
 */
protected $stopdate;

/**
 * Get startdate
 *
 * @return \DateTime
 */
 public function getStartdate(){
     return $this->startdate;
 }

 /**
  * Set startdate
  *
  * @param \DateTime $startdate
  * @return Paymentperiod
  */
  public function setStartdate($startdate){
      $this->startdate = $startdate;
      return $this;
  }

/**
 * Get stopdate
 *
 * @return \DateTime
 */
 public function getStopdate(){
     return $this->stopdate;
 }

/**
 * Set stopdate
 *
 * @param \DateTime $stopdate
 * @return Paymentperiod
 */
 public function setStopdate($stopdate){
     $this->stopdate = $stopdate;
     return $this;
 }

行动

/**
 * convert date properties
 *
 * @return void
 */
public function initializeAction(){
$dateFormat = 'dd.mm.yyyy';
if (isset($this->arguments['paymentperiod'])) {
    $this->arguments['paymentperiod']
        ->getPropertyMappingConfiguration()
        ->forProperty('startdate')
        ->setTypeConverterOption(
            'TYPO3\CMS\Extbase\Property\TypeConverter\DateTimeConverter',
            \TYPO3\CMS\Extbase\Property\TypeConverter\DateTimeConverter::CONFIGURATION_DATE_FORMAT,
            $dateFormat);
}
if (isset($this->arguments['paymentperiod'])) {
    $this->arguments['paymentperiod']
        ->getPropertyMappingConfiguration()
        ->forProperty('stopdate')
        ->setTypeConverterOption(
            'TYPO3\CMS\Extbase\Property\TypeConverter\DateTimeConverter',
            \TYPO3\CMS\Extbase\Property\TypeConverter\DateTimeConverter::CONFIGURATION_DATE_FORMAT,
            $dateFormat);
}
}

/**
 * action new
 *
 * @param \NGiB\Ngibmembers\Domain\Model\Paymentperiod $paymentperiod
 * @ignorevalidation $paymentperiod
 * @return void
 */
public function newAction(\NGiB\Ngibmembers\Domain\Model\Paymentperiod $paymentperiod = NULL) {
    $this->view->assign('paymentperiod',$paymentperiod);
    $this->view->assign('settings',$this->settings);
}

/**
 * action create
 *
 * @param \NGiB\Ngibmembers\Domain\Model\Paymentperiod $paymentperiod
 * @return void
 */
public function createAction(Paymentperiod $paymentperiod) {
    $this->paymentRepository->add($paymentperiod);
    $this->redirect('new');
}

然后是流体模板中的 sn-ps:

<f:form action="create" object="{paymentperiod}" class="form-horizontal" name="paymentperiod">

<f:form.textfield
    id="paymentperiod_field_startdate"
    property="startdate"
    class="form-control" />

那么,我的问题在哪里????

非常感谢所有提供帮助的人。

最好的问候

【问题讨论】:

    标签: validation datetime fluid extbase typo3-6.2.x


    【解决方案1】:

    好的,找到问题了:

    所以我选择的引导日期选择器需要 dateformat 中的 'dd.mm.yyyy' 来提供正确的中欧格式日期。

    经过更多的调试和阅读,我终于发现,PHP DateTime 类使用 'd.m.Y' 来解析相同的格式。

    更改控制器的initializeAction中的dateFormat解决了验证问题。

    我肯定需要在那里获得更好的日期选择器库:S

    【讨论】:

      【解决方案2】:

      您可以在自己的输入字段中设置格式:

      <f:form.textfield value="{review.datumAenderung->f:format.date(format:'Y.m.d')}" class="form-control"  name="review[datumAenderung][date]" />
      <f:form.textfield class="form-control" name="review[datumAenderung][dateFormat]" value="Y.m.d" />
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-11-21
        • 1970-01-01
        • 2011-01-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-12-11
        相关资源
        最近更新 更多