我正在阅读一段时间,但发现没有什么对我有用。 这是实体
/**
* @ORM\Column(type="string")
*
* @Assert\NotBlank(message="Molimo unesite PDF ili Word fajl.")
* @Assert\File(mimeTypes={ "application/vnd.openxmlformats-officedocument.presentationml.presentation", "application/vnd.ms-powerpoint", "application/pdf", "application/msword", "application/vnd.openxmlformats-officedocument.wordprocessingml.document"})
*/
private $body;
这是表格
// Problem with empty field on edit persist! Form expect FileType but db sends string!!!
->add('body', FileType::class, [
//'data_class' => null,// <-- If I change it nothing happened.
'label' => 'Word ili pdf dokument',
'invalid_message' =>'Id posta nije validan',
'attr' => [
'class' => 'form-group',
]])
一切都非常简单,并按照文档进行。我有一个实体,其中包含少量属性,其中一个属于文件($ body)。文件设置为保存在web / uploads / post /中。当我去编辑页面时,我收到了这个错误:
“表单的视图数据应该是Symfony \ Component \ HttpFoundation \ File \ File类的实例,但是是一个(n)字符串。您可以通过将”data_class“选项设置为null来避免这种情况或者通过添加一个视图转换器,将一个字符串转换为一个Symfony \ Component \ HttpFoundation \ File \ File“的实例。
如果我设置data_status =&gt;空字段为空。
我需要的是一些链接到这个工作的例子,Data Transformer可能吗?
答案 0 :(得分:2)
好的,解决了。 @ASOlivieri的答案很好,有一个小修改。他的回答中的代码将记住文件名的路径。所以如果你想再次编辑它会抛出未找到的exeption。您必须再次 - &gt; setBody,与原始文件名相同。在flush()
之前设置它Oreo
希望这有帮助!
答案 1 :(得分:2)
我在编辑操作中遇到了相同的问题,并通过将clearMissing参数设置为false而不是使用$form->handleRequest($request);
来手动提交表单来解决该问题,如https://symfony.com/doc/current/form/direct_submit.html所述:
if ($request->isMethod('POST'))
{
$form->submit($request->request->get($form->getName()),false);
if ($form->isSubmitted() && $form->isValid())
{
这样,如果您不提交新文件,则file的原始值将不会设置为null。
答案 2 :(得分:1)
你可以通过在editAction中创建一个新的File()来解决这个问题。像这样:
/**
* @Route("/edit/{yourEntity}", name="entity_edit")
*
* @return Response
*/
public function editAction(Request $request, YourEntity yourEntity)
{
$body = new File($this->getParameter('your_files_directory') . '/' . $yourEntity->getBody());
$yourEntity->setBody($body);
// rest of your editAction
}
答案 3 :(得分:0)
对我来说,有帮助的是:
if ($request->isMethod('POST')) {
$form->submit($request->request->get($form->getName()));
if ($form->isValid()) {...
到
$form->handleRequest($request);
if ($form->isSubmitted()) {
if ($form->isValid()) { ...