在CakePHP 3.x中将数组转换为字符串以获取日期格式

时间:2017-02-24 12:03:34

标签: arrays string datetime cakephp cakephp-3.x

在我的表单中,当我提交时,我会发送一封填写了表单输入的通知电子邮件。其中一个输入称为date

当我提交表单时,它以数组格式提交,如下所示:

[
    'year' => 'yyyy',
    'month' => 'mm',
    'day' => 'dd'
]

在我的控制器中,我会在将表单数据保存到数据库之前向登录用户发送电子邮件。

这是我的电子邮件ViewVars的摘录:

$email->viewVars([
                'date' => $date,
            ]);

因为日期是数组的形式,我在电子邮件中收到以下错误:

Notice (8): Array to string conversion [APP/Template\Email\html\bookingrequest.ctp, line 15]

第15行是我对viewVars变量$ date的回显的行,如下所示:

<?= $date ?>

我正在寻找从数组到字符串进行转换的方法,并尝试了以下方法:

给定$date = $data['session']['date'];

  • $date = date('Y-m-d',$date->getTimestamp()); - 无法在数组中使用
  • $date = $this->Bookings->Sessions->deconstruct('date', $date); - 发现它已被弃用
  • $date = $data['session']['date']->i18nFormat(); - 无法在数组中使用

1 个答案:

答案 0 :(得分:3)

您可以使用CakePHP内部使用的相同功能将日期的数组表示转换为实际日期对象,即使用相应数据库类型对象的marshal()方法。一旦你有了一个日期对象,你就可以轻松地将它格式化为你喜欢的任何东西。

对于仅限日期的类型,您将使用\Cake\Database\Type\DateType,这应该通过\Cake\Database\Type::build()单例方法检索,以便使用与应用程序其余部分相同的实例:

$dateObject = \Cake\Database\Type::build('date')->marshal($date);
// ... maybe add a check here to ensure that the conversion was successful
echo $dateObject->i18nFormat();

另见