我是与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?谢谢!
消息:
尝试从命名空间“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'));