55

私はまだ Symfony2 を学習中で、ファイルのアップロード方法がわかりません。

心配しないでください。ドキュメントは確認済みです。それは本当に良いですが、私の問題はどのチュートリアルでも説明されていません.

Symfony2 でファイルをアップロードする方法についてのガイダンスを探していますが、誰もが必要とするすべてのもの (拡張子の制約、ID などに基づくファイルの名前変更、db へのパスの保存など...)

良いチュートリアルを見つけ、それらを混ぜようとしましたが、成功しませんでした。毎回異なる問題が発生します: フォームで送信するたびにファイルが再アップロードされる (ファイル フィールドが空の場合でも)、guessExtension を使用できない、tmp パスが正しいパスではなくデータベースに保存されている、ファイルが移動されない、移動できないID は自動インクリメントされていて、まだ生成されていないため、名前変更で ID を使用しました)。

したがって、「標準」エンティティを配置します。たとえば、Photo.php とします。

/**
 * Photo
 *
 * @ORM\Table(name="photo")
 * @ORM\Entity
 * @ORM\HasLifecycleCallbacks
 */
class Photo
{
    // Annotation for the id and auto increment etc
    private $id;

    /**
     * @var string
     * @Assert\File( maxSize = "3072k", mimeTypesMessage = "Please upload a valid Image")
     * @ORM\Column(name="image", type="string", length=245, nullable=false)
     */
    private $image

    private $title

    private $description

    // all the function get, set for the 4 previous variables
}

そしてコントローラー:

public function addPhotoAction()
{
    $add_photo = new Photo;
    $formBuilderPhoto = $this->createFormBuilder($add_photo);
    $formBuilderPhoto
        ->add('title','text',array('label'  => 'Title of the photo', 'required' => true))
        ->add('image','file', array('required' => true, 'data_class' => null))
        ->add('description','textarea',array('label' => 'Description of your photo', 'required' => false))
    ;

    $form_photo = $formBuilderPhoto->getForm();

    if ($request->getMethod() == 'POST') {
        $form_photo->bind($request);
        if ($form_photo->isValid()) {
            // ...
        }
    }
    return $this->render('MyBundle:frontend:photo.html.twig',
        array('form_photo' => $form_photo->createView())
    );
}

写真をアップロードして名前を変更できるようにするために追加する「重要な」機能は何ですか?

アップロードが可能かどうかを確認するために拡張機能を確認するにはどうすればよいですか?

Symfony2 でそのようなことを行う実際の方法は何ですか? これらすべてのことを行うバンドルがたくさんあることは知っていますが、それを行う方法を学び、プロセスを理解したい.

Symfony2でファイルアップロードフォームと名前変更機能を実装する「古典的な」方法は何ですか?

4

4 に答える 4

6

VichUploaderBundle は、ファイルのアップロードにも簡単に使用できます。

https://github.com/dustin10/VichUploaderBundle

于 2015-02-05T10:25:01.907 に答える