我实际上在使用symfony创建的api。 我特别需要使用post请求创建一个ressource。我必须更新我的updated_at字段以使用vichuploaderBundle上传文件。一切都运作良好,但现在我想使用我的表单创建一个帖子请求发布。
以下是我之前在PostController中的做法。
public function postPostsAction(Request $request)
{
$post = new Post();
$post->setTitle($request->get('title'))
->setDescription($request->get('description'))
->setImageName($request->get('image_name'))
->setImageFile($request->files->get('imageFile'))
// It is required that at least one field changes if you are using doctrine
// otherwise the event listeners won't be called and the file is lost
->setUpdatedAt(new \DateTime());
// On fait appel à doctrine pour seter un id lors de la création en base
$em = $this->get('doctrine.orm.entity_manager');
$em->persist($post);
$em->flush();
return $post;
}
以下是我如何使用表单
public function postPostsAction(Request $request)
{
$post = new Post();
$form = $this->createForm(PostType::class, $post);
$form->submit($request->request->all()); // Validation des données
if ($form->isValid()) {
$em = $this->get('doctrine.orm.entity_manager');
$em->persist($post);
$em->flush();
return $post;
} else {
return $form;
}
}
这是我的表格
/**
* {@inheritdoc}
*/
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder->add('title')->add('description')->add('imageName')->add('imageFile', FileType::class)
->add('updated_at');
}
/**
* {@inheritdoc}
*/
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults(array(
'data_class' => 'AppBundle\Entity\Post',
//An API must be stateless, Cross-Site Request Forgery must be disable
'csrf_protection' => false,
'allow_extra_fields' => true,
));
}
我想将updated_at设置为类似\ new dateTime()的东西,以使我的用户不指定自己为updated_at。我看到setData()可以实现,但不知道如何对构建器中的特定字段进行操作,而不是所有构建器本身。感谢帮助和反馈我的问题!