我是 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指令,例如添加? 谢谢!
答案 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'));