Symfony 3.3中的日期说明

问题描述 投票:-1回答:1

我是与Symfony约会的新人。我尝试在我的Symfony 3.3控制器中使用PHP网站说明,但我无法得到答案。例如,我想在我的约会中添加10天。在网络上:http://php.net/manual/en/datetime.add.php Php以这种方式表达:

<?php
$date = new DateTime('2000-01-01');
$date->add(new DateInterval('P10D'));
echo $date->format('Y-m-d') . "\n";
?>

我在Symfony 3.3控制器中使用了前两行:

namespace Food\FruitBundle\Controller;

use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\Response;

class DefaultController extends Controller
{
    public function addAction()
    {
      $date = new DateTime('2000-01-01');
      $date->add(new DateInterval('P10D'));
      return new Response($date);
    }

我犯了这个错误:

Attempted to load class "DateTime" from namespace "Food\FruitBundle\Controller".
Did you forget a "use" statement for "Symfony\Component\Validator\Constraints\DateTime"?

然后我添加使用说明:

现在它显示了这个错误:

"No default option is configured for constraint Symfony\Component\Validator\Constraints\DateTime"

如何使用DateTime指令,例如add?谢谢!

php symfony datetime
1个回答
2
投票

消息:

尝试从命名空间“Food \ FruitBundle \ Controller”加载类“DateTime”。您是否忘记了“Symfony \ Component \ Validator \ Constraints \ DateTime”的“use”语句?

告诉您它尝试从当前命名空间加载classDateTime,但该类是全局命名空间的一部分。有两种可能的解决方案。您可以使用\为类添加前缀,以表示您希望全局命名空间中的类。所以它可能是这样的:

$date = new \DateTime('2000-01-01');

或者你可以在文件的顶部写一个use DateTime;告诉php每次new DateTime实际上是指全局类而不是当前命名空间中的一个。

当您尝试将对象传递给响应时,您可能仍会遇到问题,因为它可能无法正确呈现日期。那是因为new Response($date)会尝试通过调用它的魔法__toString()方法将这个对象变成一个字符串。它类似于做echo (string) $date或只是echo $date。这将使用可能不符合您需求的默认格式。这就是为什么你应该使用format()方法,而不是在你的第一个片段中看到的。所以它看起来像这样:

return new Response($date->format('Y-m-d'));
© www.soinside.com 2019 - 2024. All rights reserved.