基本的なSymfony 3アプリケーションには、ファイルをアップロードするエンティティを持つVichUploader bundleがインストールされ、設定されています。Symfony3のVichUploaderバンドルを使用したデータフィクス
ORMデータフィクスチャでこのエンティティにファイルを添付するにはどうすればよいですか?
question for this problem in Symfony 2があり、そのコードを試しました。フィクスチャはエラーなくロードされますが、「アップロードされた」ファイルは最終的なデスティネーションにコピーされません。
私は手動でこれを行うことができ、私の最新の試みは次のようになります。
<?php
// src/AppBundle/DataFixtures/ORM/LoadCourseData.php
namespace AppBundle\DataFixtures\ORM;
use Doctrine\Common\DataFixtures\OrderedFixtureInterface;
use Doctrine\Common\DataFixtures\AbstractFixture;
use Doctrine\Common\Persistence\ObjectManager;
use Symfony\Component\HttpFoundation\File\UploadedFile;
use Symfony\Component\HttpFoundation\File\MimeType\MimeTypeGuesser;
use AppBundle\Entity\Course;
class LoadCourseData extends AbstractFixture implements OrderedFixtureInterface
{
public function load(ObjectManager $manager)
{
$course = new Course();
$course->setName('How to make data fixtures in Symfony lol')
->setAuthor($this->getReference('admin-user'))
->setSummary('You\'ll know when I know!')
->setLicense($this->getReference('cc-by'))
->setDifficulty(1);
// Persist to generate slug (to be used for uploads)
$manager->persist($course);
// Attach file
// I copy it to a temporary directory as per the Symfony2 answer
copy(__DIR__.'/../Files/kitten.jpg', '/tmp/kitten.jpg');
// These are filled in for completeness
$mimetype = MimeTypeGuesser::getInstance()->guess('/tmp/kitten.jpg');
$size = filesize('/tmp/kitten.jpg');
// Create a new UploadedFile
$file = new UploadedFile('/tmp/kitten.jpg', 'kitten.jpg', $mimetype, $size, null, true);
// I have to move it manually?
// Plus how can I take advantage of the VichUploader namer?
$file->move(__DIR__.'/../../../../web/img/upload/course/');
// Apply to entity
$course->setImageFile($file);
// Persist
$manager->persist($course);
$manager->flush();
}
public function getOrder()
{
return 4;
}
}
私のソリューションは、まだ多くの作業を必要としています!私は間違った木を吠えますか?
- アップロードパスは既に
config.yml
で定義されています。私はそこからそれらにアクセスしたり、パラメータ - にそれらを変換する必要があり
- ファイルを投げて、より多くのエラーチェックと例外が先にコピーされる必要がありますが、それは
- 構成されVichUploaderのナメルを使用していないので、ファイル名は、間違っています他の場所、おそらくサービスとして生きるべきでしょうか?