Я новичок в Symfony и OOP.Создать новый экземпляр для каждого загружаемого файла
Пытается создать приложение, в котором пользователи могут загружать файлы своей деятельности. У каждого пользователя будет одно или несколько действий. Каждая активность будет иметь ровно один файл.
Пользователь просто загрузит файлы и для каждого файла я хочу создать новую Activity();
Так я думал, что контроллер должен выглядеть следующим образом:
Подробные файлы можно найти здесь: https://gist.github.com/carambazza/53804469d3021601f1bb
// DashboardController.php
class DashboardController extends Controller
{
public function indexAction(Request $request)
{
$activity = new Activity();
$form = $this->createForm(ActivityType::class, $activity);
$form->handleRequest($request);
// form is valid ...
}
.
// ActivityType.php
class ActivityType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('name', TextType::class)
->add('description', TextType::class)
->add(
'activityFile',
CollectionType::class,
array(
'entry_type' => ActivityFileType::class,
'allow_add' => true,
'allow_delete' => true,
'by_reference' => false,
)
)
->add('save', SubmitType::class, array('label' => 'Upload .fit file'));
}
.
// ActivityFileType.php
class ActivityFileType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('file', FileType::class,
array(
"required" => TRUE,
"attr" => array(
//"accept" => "image/*",
"multiple" => true,
)
)
);
}
отображение, как это:
// Activity.orm.xml
<?xml version="1.0" encoding="utf-8"?>
<doctrine-mapping xmlns="http://doctrine-project.org/schemas/orm/doctrine-mapping" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://doctrine-project.org/schemas/orm/doctrine-mapping http://doctrine-project.org/schemas/orm/doctrine-mapping.xsd">
<entity repository-class="ChartsBundle\Repository\ActivityRepository" name="ChartsBundle\Entity\Activity">
<id name="id" type="guid" column="id">
<generator strategy="UUID"/>
</id>
<many-to-one field="user" target-entity="User" inversed-by="activities">
<join-column name="user_id" referenced-column-name="id" />
</many-to-one>
<one-to-one field="activityFile" target-entity="ActivityFile">
<join-column name="activity_file_id" referenced-column-name="id" />
</one-to-one>
<!-- other connnections -->
<!-- all fields -->
</entity>
</doctrine-mapping>
.
//ActivityFile.orm.xml
<?xml version="1.0" encoding="utf-8"?>
<doctrine-mapping xmlns="http://doctrine-project.org/schemas/orm/doctrine-mapping" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://doctrine-project.org/schemas/orm/doctrine-mapping http://doctrine-project.org/schemas/orm/doctrine-mapping.xsd">
<entity repository-class="ChartsBundle\Repository\ActivityFile" name="ChartsBundle\Entity\ActivityFile">
<id name="id" type="guid" column="id">
<generator strategy="UUID"/>
</id>
<!-- all fields -->
</entity>
</doctrine-mapping>
Вопрос (ы):
- ли отношения между объектами Allright нравится то, что они есть?
- Как я могу загрузить загрузку файла и создать новый экземпляр активности для каждого файла? Пользователи смогут выбрать несколько файлов для загрузки
Спасибо, что сейчас работает! Также имя файла хранилища теперь исправлено. Я думаю, что в файле ActivityFile.orm.xml, как вы сказали. Должен ли я изменить свойство 'activityFile' на' activityFiles' для Entity Activity? И изменить его на массив() или что-то, чтобы получить несколько выбранных файлов? – caramba
Как сейчас, если я выберу несколько файлов и отправлю форму, я просто получу последний из выбранных файлов, если я вызову '$ activity-> getActivityFile()', но я бы хотел создать запись активности и загрузить каждый выбранный файл – caramba
@caramba, поскольку это один к одному, я оставил бы это как активность. Если вы хотите иметь несколько файлов для каждого действия, вам нужно будет изменить отношение к одному-ко-многим, и в этот момент ваш первоначальный тип коллекции будет правильным. Зависит от того, что вы хотите, по одному файлу за активность или по нескольким файлам. –