api 发送的 symfony 表单无效日期时间字段
symfony form invalid datetime field sended by api
我在 api (Angular/Symfony) 工作,我尝试提交我的表单,但表单总是显示该值对于实体的日期或日期时间字段无效。即使我在没有更改的情况下发回相同的日期。
Action
/**
* @Rest\Route("/editar/{slug}")
* @Rest\View()
*/
public function editarEmbarque(Request $request, $slug)
{
$embarque = $this->getDoctrine()->getRepository('AppBundle:Embarque')->findOneBySlug(trim($slug));
$response = [];
if ($embarque) {
$body = $request->getContent();
$data = json_decode($body, true);
$form = $this->createForm('AppBundle\Form\EmbarqueType', $embarque);
$form->submit($data);
if ($form->isValid()) {
$em = $this->get('doctrine.orm.entity_manager');
$em->persist($embarque);
$em->flush();
return ['status' => 'si'];
}
return ['status' => 'no'];
}
return ['status' => '404'];
}
实体有多个日期时间字段作为表单。
这是我对错误源和消息进行转储时的响应
string(20) "entregaFacturacionAt"
string(24) "This value is not valid."
{"status":"no"}
数据也没有问题
array(11) {
["bl"]=>
string(5) "mi bl"
["manifiesto"]=>
string(24) "mi otro manifiesto kkk"
["facturaProveedor"]=>
array(0) {
}
["embarqueContenedores"]=>
array(0) {
}
["habilitadoMariel"]=>
bool(false)
["liberadoBlHouse"]=>
bool(false)
["liberadoBlMaster"]=>
bool(false)
["slug"]=>
string(30) "mi-bl-mi-otro-manifiesto-kkk"
["createdAt"]=>
string(25) "2018-03-22T08:27:37-04:00"
["updatedAt"]=>
string(25) "2018-03-22T17:41:11-04:00" //this is a date unchanged
["entregaFacturacionAt"]=>
string(10) "2018-03-24" // this is a date changed
}
我忘记了什么,我使用了数据转换器但没有结果。有什么想法吗?
提前致谢。
EDIT: FORM EXAMPLE
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('regular_no_date_fields') // <= it could be text,string,number,array... it works
->add('blAt', DateType::class);
}
EDIT: POSTED DATA
{
"bl":"mi bl",
"blAt": "Fri Mar 30 2018", <= this is one of the formats, i tried also with m-d-y y-m-d or changing - for /
"manifiesto":"mi manifiesto",
"pais":"China",
"puertoOrigen":"Tsing ao",
"puertoDestino": "Mariel",
"embarqueContenedores":[]
}
有趣的是,当我将数据直接设置到实体并使用 de validator 时,一切正常。例如上面的 post 数据工作正常。
尝试像这样声明您的 DateType:
$builder
->add('yourDateField', DateType::class, array(
'input' => 'string', //depends on format of underlying object
'widget' => 'single_text'
))
我在处理 AngularJs 和 Symfony 时发现了这个问题。您应该像这样向您发送日期类型。
{"date":"2018-03-22T23:00:00.000Z"}
从后端:
$builder->add('date', 'datetime', ['widget' => 'single_text']);
我在 api (Angular/Symfony) 工作,我尝试提交我的表单,但表单总是显示该值对于实体的日期或日期时间字段无效。即使我在没有更改的情况下发回相同的日期。
Action
/**
* @Rest\Route("/editar/{slug}")
* @Rest\View()
*/
public function editarEmbarque(Request $request, $slug)
{
$embarque = $this->getDoctrine()->getRepository('AppBundle:Embarque')->findOneBySlug(trim($slug));
$response = [];
if ($embarque) {
$body = $request->getContent();
$data = json_decode($body, true);
$form = $this->createForm('AppBundle\Form\EmbarqueType', $embarque);
$form->submit($data);
if ($form->isValid()) {
$em = $this->get('doctrine.orm.entity_manager');
$em->persist($embarque);
$em->flush();
return ['status' => 'si'];
}
return ['status' => 'no'];
}
return ['status' => '404'];
}
实体有多个日期时间字段作为表单。
这是我对错误源和消息进行转储时的响应
string(20) "entregaFacturacionAt"
string(24) "This value is not valid."
{"status":"no"}
数据也没有问题
array(11) {
["bl"]=>
string(5) "mi bl"
["manifiesto"]=>
string(24) "mi otro manifiesto kkk"
["facturaProveedor"]=>
array(0) {
}
["embarqueContenedores"]=>
array(0) {
}
["habilitadoMariel"]=>
bool(false)
["liberadoBlHouse"]=>
bool(false)
["liberadoBlMaster"]=>
bool(false)
["slug"]=>
string(30) "mi-bl-mi-otro-manifiesto-kkk"
["createdAt"]=>
string(25) "2018-03-22T08:27:37-04:00"
["updatedAt"]=>
string(25) "2018-03-22T17:41:11-04:00" //this is a date unchanged
["entregaFacturacionAt"]=>
string(10) "2018-03-24" // this is a date changed
}
我忘记了什么,我使用了数据转换器但没有结果。有什么想法吗?
提前致谢。
EDIT: FORM EXAMPLE
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('regular_no_date_fields') // <= it could be text,string,number,array... it works
->add('blAt', DateType::class);
}
EDIT: POSTED DATA
{
"bl":"mi bl",
"blAt": "Fri Mar 30 2018", <= this is one of the formats, i tried also with m-d-y y-m-d or changing - for /
"manifiesto":"mi manifiesto",
"pais":"China",
"puertoOrigen":"Tsing ao",
"puertoDestino": "Mariel",
"embarqueContenedores":[]
}
有趣的是,当我将数据直接设置到实体并使用 de validator 时,一切正常。例如上面的 post 数据工作正常。
尝试像这样声明您的 DateType:
$builder
->add('yourDateField', DateType::class, array(
'input' => 'string', //depends on format of underlying object
'widget' => 'single_text'
))
我在处理 AngularJs 和 Symfony 时发现了这个问题。您应该像这样向您发送日期类型。
{"date":"2018-03-22T23:00:00.000Z"}
从后端:
$builder->add('date', 'datetime', ['widget' => 'single_text']);