2012-11-13 9 views
5

Sonata Adminでは、sonata_type_collectionのアップロードとプレビューの画像ファイルを使用します。私の管理/ ItemAdmin.phpでSonataAdminBundle with sonata_type_collection and upload image

:私の管理/ ItemPictureAdmin.phpで

class ItemAdmin extends Admin 
{ 

    protected function configureFormFields(FormMapper $formMapper) 
    { 
     $formMapper 
      ->add('title') 
      ->with('Photos') 
      ->add('pictures', 'sonata_type_collection', array(
       'label' => 'Pictures', 
       'by_reference' => false, 
       'required' => false, 
       ), array(
       'edit' => 'inline', 
       'inline' => 'table', 
       'sortable' => 'id' 
      )) 
      ->end() 
     ; 
    } 

class ItemPictureAdmin extends Admin { 

    protected function configureFormFields(FormMapper $formMapper) { 
     $obj = $this->getSubject(); 

     $formBuilder = $formMapper->getFormBuilder(); 

     if(is_object($obj) && $obj->getPicture()) 
     { 
      $formMapper 
      ->add('picturePreview', 'image_preview', array(
       'required' => false, 
       'property_path' => false, 
       'upload_dir' => '/uploads/picture/', 
       'file_name' => $obj->getPicture() 
      )); 
     } 
     $formMapper->add('pictureFile', 'file', array('label' => 'Pic')); 
    } 

タイプ "image_previewは、" 私は、単純なテンプレート小枝で作成した新しいタイプです画像を表示する。

プレビュー:http://i.stack.imgur.com/AC0ih.png

問題1:私は2つの2貴様とデータベースに撮影した画像ファイルを画像を持っていますが、リストには、それだけで最初に表示されます。

問題2:画像を更新できません...レコードを削除して、新しいファイルを再度アップロードする必要があります。

+0

問題2: 'ItemPictureAdmin'に' preUpdate'メソッドを作成する必要がありますか?以下はその例です:[Symfony2、Sonata管理バンドルとファイルアップロード](http://blog.code4hire.com/2011/08/symfony2-sonata-admin-bundle-and-file-uploads/) – AndreaS

+0

最初の号組み込み管理者の '$ this-> getSubject()'は常にその関係から最初のオブジェクトを取得するという、まだ修正されていないソナタのバグです。これには一時的な解決策があります。これを見てください: http://stackoverflow.com/questions/18106502/how-to-get-child-object-in-embedded-admin-class-in-sonata-admin/22815329#22815329 – hombee

答えて

0

私自身が第1号にぶつかりました。私は見つけたすべての可能な解決策を試みたが、何も働かなかった。私は私の解決策のいくつかを試してみました。

  • 私はセッションで(あなたのケースItemPictureAdminで)子エンティティのインデックスを保存し、私は実体を必要なときに、私はセッションからインデックスを取るとして要素になるだろう:私は何
    親エンティティのリストからのそのインデックス。私はセッションインデックス0に保存し、ItemPictureAdminに、私はこの後、インデックス0

  • でItemPictureAdminの彼の親リストにアクセス

  • まず、私はセッションでインデックスをインクリメント。リストからすべての要素を取得した後、インデックスを保存したセッションパラメータを削除しました。

このソリューションは、私は同じ問題を抱えていたと私はドキュメントがリンク上で与えられているため、「カスタムフォームタイプ拡張子」「http://symfony.com/doc/current/cookbook/form/create_form_type_extension.html」を介してこれを行うことができる午前caponicaのソリューションhere

0

の適応です。

これは完璧な解決策です。