Я не использовал «Зенд», так что, возможно, я выдуваю дым. Кажется, вопрос не зависит от «зенд».
Загрузка в 3 шага кажется немного неловкой. Есть ли причина использовать 3 формы? Кажется, что эта концепция только вызывает дилемму из-за использования временного файла (что является плохой идеей, кстати).
Как минимум, я бы объединил первые два шага, описание и загрузку картинки. Есть ли причина не включать кнопку «Выбрать файл» на странице описания? Кажется особенно утомительным проходить другую форму, даже если у вас нет изображения. Если у пользователя действительно есть изображение, было бы разумно поместить его и описание в его окончательные места в БД, помеченные как «предварительные». Ваш код презентации будет игнорировать «предварительные» элементы (для любого пользователя, кроме владельца). Это намного чище, чем беспокоиться об отдельных файлах. Если пользователь никогда не подтвердит, у вас будет некоторая очистка, чтобы сделать в конечном счете. Но если пользователь был только временно отвлечен или отключен (думая о днях модемов удаленного доступа), ему будет легко выбрать, где он остановился. Ваш поиск презентации / код презентации будет показывать «предварительные» элементы, принадлежащие самому пользователю. И когда он подтвердит, вам нужно только изменить статус с «предварительный» на «подтвержденный».
Эта третья страница подтверждения - это запрос пароля или страница «Вы уверены / предварительный просмотр»? Я надеюсь, что это не первый. Пользователь должен быть авторизован к моменту появления первой страницы описания. Если последняя страница предназначена только для предварительного просмотра текста, вы можете устранить ее, одновременно показывая предварительный просмотр, как это делает StackOverflow. Если это вступит в конфликт с «zend» или вы захотите показать полный макет с изображением, тогда вы можете поместить кнопку «Предварительный просмотр» на единственную страницу.
Самым чистым дизайном будет отдельная страница с текстовым полем для описания, кнопкой «Выбрать файл» для необязательного изображения, кнопкой «Предварительный просмотр» и кнопкой «Завершить». Пользователь может ввести свое описание и, возможно, выбрать файл изображения. Передача данных не происходит, пока он не выберет «Завершить» или «Предварительный просмотр». Если он чувствует себя смелым, он нажимает «Завершить», данные передаются и помечаются как «подтвержденные». Если он хотел предварительный просмотр, происходят такие же передачи, за исключением того, что данные помечены как «предварительные» в БД. Страницу дисплея, вероятно, придется изменить, чтобы включить изображение. Вы не хотели бы тратить место на странице «Описание» для изображения до его загрузки. Но это был бы простой условный шаг в коде, который выплевывал <IMG...>
для картинки только тогда, когда картинка была доступна.