私は今拡張しようとしている単純なCMSであるUdemyのSymfonyチュートリアルに従っています。Symfony 3新しいファイルがアップロードされなかった場合のファイルアップロードとDB古いファイルフィールドの削除
フォームにファイルアップロードフィールドを追加しました。ファイルがアップロードされ、ファイル名がデータベースに保存されています。
編集レコードと同じように新しいレコードを追加する私は新しいファイルを選択します。編集フォームで新しいファイルを追加します。
アップロードする新しいファイルを選択せずに編集しようとすると、元のファイル名がdbから削除されます。
これは私が問題は私が持っていたフォームビルダdata_classから来ていると思うsymfonyのフォームビルダーは、私がこの
->add('brochure', FileType::class,[
'label' => 'Image',
'data_class' => null,
'required' => false
])
を持っている場合、私は、コントローラ
public function editAction(Request $request, Car $car)
{
$deleteForm = $this->createDeleteForm($car);
$editForm = $this->createForm('CarBundle\Form\CarType', $car);
$editForm->handleRequest($request);
if ($editForm->isSubmitted() && $editForm->isValid()) {
$file = $editForm['brochure']->getData();
if(!empty($file)) {
// Generate a unique name for the file before saving it
$fileName = md5(uniqid()).'.'.$file->guessExtension();
// Move the file to the directory where brochures are stored
$file->move($this->getParameter('brochures_directory'), $fileName);
$car->setBrochure($fileName);
} else {
$id = $car->getId();
$em = $this->getDoctrine()->getManager();
$car = $em->getRepository('CarBundle:Car')->find($id);
$fileName = $car->getBrochure();
$car->setBrochure($fileName);
}
$em = $this->getDoctrine()->getManager();
$em->merge($car);
$em->flush();
return $this->redirectToRoute('car_edit', array('id' => $car->getId()));
// return $this->redirectToRoute("car_index");
}
で、これまで持っているものですエラーのために追加する
フォームの表示データは、クラス> Symfony \ Component \ HttpFoのインスタンスであると予想されますundation \ File \ Fileですが、(n)文字列です。
しかし、私はそれを修正する方法、何か提案や歓迎歓迎!
ps。私はこれがおそらくサービスであるべきであることを読んだが、赤ちゃんが最初にステップする!
mayby try else blockを削除してください。 – mcek
また、$ emを2回設定してリセットします。上部に$ emを設定してください – pogeybait