1

我有一个服务器,我需要在其中存储一些图像。现在图像可以上传或动态创建让我们说只是通过向一些默认图片添加一些文本(所以我为此制作了一个文件 MakenewForm.php)。我数据库中的表将文件名存储在本地文件系统上。现在上传很简单,我可以使用默认的 _new 操作。为了创建图片,我做了一个新动作,比如说makenewnew并且makenew两者都显示在列表视图中。我复制newSuccess.phpmakenewSuccess.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

我需要一些指示来实现这一目标。

4

1 回答 1

0

我希望能够很好地专注于您正在寻找的东西。

关于$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);
}

我希望这可以帮助你。

于 2011-12-10T16:58:09.183 回答