Symfony 3.3中的日期说明

时间:2017-12-23 13:55:31

标签: php symfony datetime

我是 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 Controller中使用了前两行:

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指令,例如添加? 谢谢!

1 个答案:

答案 0 :(得分:2)

消息:

  

尝试加载课程&#34; DateTime&#34;来自命名空间&#34; Food \ FruitBundle \ Controller&#34;。你忘记了&#34;使用&#34;和#34; Symfony \ Component \ Validator \ Constraints \ DateTime&#34;?

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

$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'));