Symfony чередует новое действие
У меня есть сервер, где мне нужно хранить некоторые изображения. Теперь изображения могут быть загружены или созданы на лету, скажем, просто добавив текст к некоторому изображению по умолчанию (поэтому я сделал файл MakenewForm.php
для этого). Таблица в моей базе данных хранит имя файла в локальной файловой системе. Теперь загрузка проста, я могу просто использовать для этого действие _new по умолчанию. Для создания картины я сделал новое действие, скажем, makenew
, new
а также makenew
оба отображаются на экране списка. Я скопировал newSuccess.php
в makenewSuccess.php
, Теперь я хочу другой набор кнопок отправки для них. Я не могу понять, как это сделать. Все, что я вижу, это:
<div id="sf_admin_content">
<?php include_partial('poster/form', array('poster' => $poster, 'form' => $form, 'configuration' => $configuration, 'helper' => $helper)) ?>
</div>
Я не знаю, что такое $ configuration и что такое $ helper. Может кто-нибудь рассказать мне о них? Какой мне нужно изменить и как?
Кроме того, как вы можете сделать вывод, действие отправки new
действие нужно только сделать $form->save()
но представить действие makenew
Нужно взять весь текстовый ввод и написать файл изображения (скажем, используя imagejpeg)
Мне нужно несколько указателей для достижения этой цели.
1 ответ
Я надеюсь хорошо сосредоточиться на том, что вы ищете.
Около $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);
}
Я надеюсь это тебе поможет.