Я надеюсь сосредоточиться на том, что вы ищете.
О $configuration
и $helper
, как вы можете найти в cache\mypplication\dev\modules\autoMymodule\actions\actions.class.php
, функция preExecute()
также используется для их создания:
$this->configuration = new mymoduleGeneratorConfiguration();
$this->helper = new mymoduleGeneratorHelper();
Эти классы находятся в apps\docdesk\modules\mymodule\lib
. Вы можете найти базовые классы в cache\mypplication\dev\modules\autoMymodule\lib
. Взгляните на эти базовые классы, чтобы понять, как они используются и какие функции конфигурации и вспомогательные функции доступны для администратора.
Чтобы разобраться с вашим новым действием, я не знаю, какую функцию вы разрабатываете, поэтому я попытаюсь представить два возможных сценария. Вы можете использовать только форму, переключая ваши функции загрузки / создания изображения через пользовательский виджет, переопределяя шаблон _form.php
, вызываемый в вашем фрагменте, и новое действие и т. Д., Или, как вы следите, создайте совершенно отдельное действие, форма и все необходимые шаблоны. Таким образом, в ваш makenewSucces.php вы можете включить шаблон _makeform.php, вызываемый с помощью
<?php include_partial('poster/makeform', array('poster' => $poster, 'form' => $form, 'configuration' => $configuration, 'helper' => $helper)) ?>
Конечно, вы должны поместить шаблон _makeform.php
в apps\docdesk\modules\mymodule\template
как каждый новый или переопределенный.
Я не совсем понимаю вашу проблему с сохранением изображения ... Я полагаю, вы спрашиваете о цепочке сохранения изображения и о том, как и где вы можете управлять тем, что вам нужно.
Чтобы добавить виджет для загрузки изображения в ваш класс PosterForm
, вы можете использовать такой фрагмент кода, где мы предполагаем photo
в качестве имени виджета, в соответствии с полем схемы photo: { type: varchar(255), required: true }
, которое, конечно, можно настроить:
public function configure()
{
$photo = $this->getObject()->getPhoto(); // get the photo name
$photo = sfConfig::get('sf_upload_image_dir').$photo;
$this->widgetSchema['photo'] = new sfWidgetFormInputFileEditable(array(
'label' => 'Photo',
'file_src' => $photo,
'is_image' => true,
'edit_mode' => !$this->isNew(),
'delete_label' => 'check to remove',
'template' => '<div>%input%<br/><br/>%file%<br/><br/>%delete%<p>%delete_label%<br/><p></div>'
));
$this->validatorSchema['photo'] = new sfValidatorFile(array(
'required' => true,
'path' => sfConfig::get('sf_upload_image_dir'),
'mime_categories' => array('web_images' => array(
'image/jpeg',
'image/pjpeg',
'image/png',
'image/x-png'
)),
'mime_types' => 'web_images',
));
$this->validatorSchema['photo_delete'] = new sfValidatorPass();
}
Обратите внимание, что мой параметр для upload_image_dir
равен %SF_UPLOAD_DIR%/images/
Symfony загрузит и сохранит изображение для вас!
Затем вы можете переопределить функцию doSave
в соответствии с вашими потребностями, добавив такую же функцию в свой класс PosterForm
:
protected function doSave($con = null)
{
$delete = $this->getValue('photo_delete');
if ( $delete )
{
// ...
}
$upload = $this->getValue('photo');
if ( $upload )
{
// ...
}
return parent::doSave($con);
}
Наконец, чтобы удалить ваше изображение, то есть файл, когда вы удаляете объект, то есть запись в БД, где имя изображения является полем, вы должны поместить этот код в класс вашей модели Poster
:
public function delete(PropelPDO $con = null) // using Propel
{
$photo = sfConfig::get('sf_upload_image_dir').$this->getPhoto();
if ( file_exists($photo) )
unlink($photo);
return parent::delete($con);
}
Надеюсь, это поможет вам.