1

いくつかの画像を保存する必要があるサーバーがあります。これで、画像をアップロードするか、オンザフライで作成できるようになりました。デフォルトの画像にテキストを追加するだけです(そのためのファイル MakenewForm.phpを作成しました)。私のデータベースのテーブルは、ファイル名をローカル ファイル システムに保存します。これでアップロードは簡単になりました。デフォルトの _new アクションを使用するだけです。画像を作成するために、新しいアクションを作成しましたmakenewnew両方とも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を使用してみましょう)

これを達成するための指針が必要です。

4

1 に答える 1

0

あなたが探しているものに焦点を当てたいと思います。

About$configurationとは、関数で$helper見つけることができるように、それらを作成するためにも使用されます。cache\mypplication\dev\modules\autoMymodule\actions\actions.class.phppreExecute()

$this->configuration = new mymoduleGeneratorConfiguration();
$this->helper = new mymoduleGeneratorHelper();

これらのクラスはapps\docdesk\modules\mymodule\lib. 基本クラスは にありcache\mypplication\dev\modules\autoMymodule\libます。これらの基本クラスを見て、どのように使用されているかを理解し、アドミン ジェネレーターで使用できる構成関数とヘルパー関数を理解してください。

あなたの新しいアクションに対処するために、あなたが開発している機能を私は知らないので、考えられる 2 つのシナリオを想像してみます。カスタムウィジェットを介して画像のアップロード/作成の機能を切り替え、テンプレートをオーバーライド_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次のようなスニペットを使用できます。photophoto: { 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);
}

最後に、画像、つまりファイルを削除するには、オブジェクト、つまり画像名がフィールドである db レコードを削除するときに、次のコードをモデル クラスに配置する必要があります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 に答える