Идея детского дома в OneupUploaderBundle заключается в том, что вы не загрязняете свою папку для загрузки файлами, которые не принадлежат никаким объектам. Это означает, что если вы используете загруженные файлы в своих сущностях, вы должны вывести их из приюта. Если вы настроили сопоставление для использования приюта, все загруженные файлы будут сохранены в отдельной папке после загрузки.
Citing the documentation:
Они будут перемещены в нужное место, как только вы вызвать uploadFiles
метод на хранении.
Это означает, что вы можете переместить логику из слушателя событий (который будет называться не меньше), но переместить его в контроллер, где вы хотите, чтобы, наконец, загружать и хранить файлы в детском доме.
// src/Acme/Controller/AcmeController.php
class AcmeController extends Controller
{
public function storeAction()
{
// ...
if ($form->isValid()) {
$orphanageManager = $this->get('oneup_uploader.orphanage_manager')->get('gallery');
// upload all files to the configured storage
$files = $manager->uploadFiles();
// your own logic to apply the files to the entity
// ...
}
}
}
Обязательно используйте приют для сирот, если вам действительно нужно. It has some drawbacks.
Спасибо за тщательный ответ! Моя проблема в том, что мне нужно захватить исходное имя файла, что очень просто, используя прослушиватель - захватить исходную предварительную загрузку файла, захватить новую отправку имени файла и сохранить оба значения в сущности (именно этот объект нужно удалить, если форма никогда не представляется). Я не думаю, что можно получить оригинал от менеджера приюта. Детский дом идеально подходит для моего конкретного случая использования (который обеспечивает возможность загрузки нескольких вложений в автономную форму, которые никогда не могут быть отправлены) – dblack
Что касается вопроса о том, как пользователи получают файлы из предыдущей попытки загрузки файлов в форму, простым обходным решением было бы очистить файлы, загруженные для сеанса, по запросу «GET» ... Как вы относитесь к понятному методу в объекте FilesystemOrphanageStorage (который очищает все файлы, отправленные на сеанс), что тогда мы могли бы позвонить в контроллер? – dblack