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);
}

Я надеюсь это тебе поможет.

Другие вопросы по тегам