Создавая модель на основе Filestore_File
Вам необходимо указать правильную модель. Под собственно я имею в виду:
- Это должно быть расширение Model_Filestore_File
- В нем должно быть установлено MasterField, чтобы связать его с вашей записью
В этом случае, однако, вы должны знать ссылочный идентификатор при загрузке изображений, поэтому он не будет работать, если вы загрузите изображение до создания записи. Просто чтобы дать вам представление, код будет выглядеть
$mymodel=$this->add('Model_listingimages');
$mymodel->setMasterField('listing_id',$listing_id);
$upload_field->setModel($mymodel);
$upload_field->allowMultiple();
Таким образом, все изображения, загруженные через поле, будут автоматически связаны с вашей записью. Вам нужно будет унаследовать модель от Model_Filestore_File. Model_Filestore_Image - отличный пример, который вы можете использовать. Вы должны добавить связанный объект (соединение) и определить поля в этой таблице.
Есть и другой способ:
Выполняя дополнительную работу по связыванию изображений
Когда форма отправлена, вы можете получить список идентификаторов файлов, просто получив их.
$form->get('add_photos')
Внутри обработчика отправки формы вы можете выполнить некоторую ручную вставку в листинг изображения.
$form->onSubmit(function($form) uses($listing_id){
$photos = explode(',',$form->get('add_photos'));
$m=$form->add('Model_listingimages');
foreach($photos as $photo_id){
$m->unloadDdata()->set('listing_id',$listing_id)
->set('filestore_image_id',$photo_id)->update();
}
}); // I'm not sure if this will be called by CRUD, which has
// it's own form submit handler, but give it a try.
Вы должны быть осторожны, так как, если вы используете глобальную модель внутри поля загрузки без ограничений, то пользователь может получить доступ или удалить изображения, загруженные другими пользователями. Если вы используете файловую модель с MVCGrid, вы должны увидеть, к каким файлам они теоретически могут получить доступ. Это нормально, и поэтому я рекомендую использовать первый метод, описанный выше.
ПРИМЕЧАНИЕ: вы не должны использовать пробелы в имени файла, 2-й аргумент addField, это нарушает JavaScript.