2011-12-09 6 views
1

私はいくつかの画像を保存する必要があるサーバーを持っています。今の画像がアップロードまたは単にいくつかのデフォルトの画像にテキストを追加することによって、私たちは言わせてその場で作成することができますいずれか(だから私は、そのためのファイルMakenewForm.phpをしました)。私のデータベースのテーブルは、ローカルファイルシステム上のファイル名を格納します。アップロードは簡単ですが、デフォルトの_newアクションをそのまま使用できます。画像を作成するために、私は新しいアクション、例えばmakenewを作った。 newmakenewの両方がリストビューで表示されます。 newSuccess.phpmakenewSuccess.phpにコピーしました。今度はそれらのために別のセットの送信ボタンが必要になります。私はそれをする方法を理解していないようです。私が見るすべてはこれです:symfonyの代替新しいアクション

<div id="sf_admin_content"> 
<?php include_partial('poster/form', array('poster' => $poster, 'form' => $form,  'configuration' => $configuration, 'helper' => $helper)) ?> 
</div> 

私は$の設定で、$ヘルパーが何であるかわかりません。誰かが私について話すことができますか?どれを変更する必要がありますか?また

、あなたが推測できるように、newアクションの送信アクションのみ$form->save()を行う必要があるが、すべてのテキスト入力を取得し、画像ファイルを書き込む(のはimagejpegを使用して言わせしmakenewニーズの作用を提出

私はこれを達成に向けていくつかのポインタを必要としています。

答えて

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で見つけることができます。これらの基本クラスを見て、どのように使用されているか、そして管理ジェネレータが利用可能な設定関数とヘルパ関数を理解してください。あなたの新しいアクションに対処するための

、私はあなたが私は2つのシナリオを想像してみましょう開発している機能を知りません。あなたのスニペットで呼び出されたテンプレート_form.phpをオーバーライドしてカスタムウィジェットをアップロード/作成する機能を切り替えるフォームのみを使用することができます。新しいアクションなど、これはあなたがフォローしている方法です。個別のアクション、フォーム、および必要なすべてのテンプレート。だからあなたのmakenewSucces.phpに、あなたがそれぞれの新しいまたはオーバーライド一つとしてapps\docdesk\modules\mymodule\templateでテンプレート_makeform.phpを配置する必要があります。もちろん、

<?php include_partial('poster/makeform', array('poster' => $poster, 'form' => $form, 'configuration' => $configuration, 'helper' => $helper)) ?>

と呼ばれるテンプレート_makeform.phpを含めることができます。

私はよく、画像の節約についてのあなたの悩みを理解していない...私はあなたが、どのように、どこで、あなたが必要なものを管理することができ、画像の保存チェーンのために求めているとします。あなたは私たちがphotoなどのウィジェットの名前を仮定し、このようなスニペットを使用することができ、あなたのPosterFormクラス内で画像をアップロードするためにウィジェットを追加するに は、スキーマのフィールド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が画像をアップロードして保存します。

次に、あなたがあなたのPosterFormクラスではまだ同じものを入れて、あなたのニーズに応じて、doSave機能を無効にすることができます:あなたがオブジェクトを削除する場合

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

私は、これはあなたを助けることができると思います。