2016-07-11 2 views
0

Я использую Media в User Entity (аватар).Как удалить категорию из sonata_type_model_list в url @admin_sonata_media_media_create

Сначала я использовал sonata_media_type. Это сработало хорошо.

Проблема в том, что я использую ManyToOne - поэтому администратор может выбрать один из списка. Для этого я должен использовать sonata_type_model_list - у этого есть список, новые, удаленные действия. Я удалил delete на 'btn_delete' => ''. Здесь действие списка работает хорошо (до сих пор).

Настоящая ПРОБЛЕМА находится в новом действии. Новая загрузка окна действия из ajax - и у нее есть файл/ссылка, категория (два поля).

Здесь мне нужно удалить Категорию полей целиком (список, новые, удалить). Зачем нам это надо? Потому что это бесполезно!

  • СПИСОК - отображать только 'context' => 'profile' от 'link_parameters'. Таким образом, действие LIST бесполезно.
  • NEW - Новое действие может создать новый контекст, но оно не будет отображаться в списке (прямо сейчас). Так что мне это не нужно. Если мне нужно, я создам от ClassificationBundle.
  • DELETE - Удалить действие не имеет эффекта (прямо сейчас - здесь).

enter image description here

MY-RESEARCH:

Я попытался изменить ШАБЛОН - но я не могу найти нужный файл прут. Он указывает на parent() - который указывает на пакет администрирования!

К проверке файла/ссылки - Я создал свой собственный ImageProvider (согласно документу) - он работает (проверяет) хорошо.

Я попытался удалить поле категории (проверьте изображение) - но не удалось.

Мой код:

class ImageProvider extends BaseProvider{...} 
     public function buildCreateForm(FormMapper $formMapper) { 
// This works - changed File/Reference to ok 
      $formMapper->add('binaryContent', 'file', array('label' => 'ok', 
       'constraints' => array(
        new NotBlank(), 
       ), 
      )); 
// This works - added a new text field 
      $formMapper->add('context', 'text', ['attr' => ['class' => 'fz_rocks']]); 
// This not working - also ->add('category') - has no effect even when attr=hide and so on.. 
      $formMapper->remove('category'); 
     } 

-

ответ

0

Я решил скрыть поле categoy. Если я удаляю полностью, это иногда вызывает проблему. Сейф должен скрываться.

Для достижения этой цели я использую пользовательские поставщик, в соответствии с сонатой-медиа документ creating_a_provider_class.rst

namespace Application\Sonata\MediaBundle\Provider; 
class ImageProvider extends BaseProvider { 
    public function buildCreateForm(FormMapper $formMapper) { 
     $formMapper->add('binaryContent', 'file', ['label' => 'Upload a new file', 'constraints' => [new NotBlank(), new NotNull()]])->end(); 
     $formMapper->with('General', ['class' => 'hidden'])->add('category'); 
    } 
    public function buildEditForm(FormMapper $formMapper) { 
     parent::buildEditForm($formMapper); 
     $formMapper->add('binaryContent', 'file', ['label' => 'Upload a new file', 'required' => FALSE])->end(); 
     $formMapper->with('General', ['class' => 'hidden'])->add('category'); 
    } 
} 
0

Чтобы удалить категорию поле из средств массовой информации всплывающих

  • Вам необходимо переопределить класс медиа-админа путем переопределения параметру учащемуся sonata.media.admin.media.class
  • Создать вас собственный класс администратора и расширить его с помощью базового класса администрирования соната.
  • Override configureFormFields() метод, определяя в своем классе администратора
  • Удалить поле категории из $formMapper

Override соната класс медиа

parameters: 
    sonata.media.admin.media.class: Your\MediaBundle\Admin\ORM\MediaAdmin 

Медиа Администратор класса

namespace Your\MediaBundle\Admin\ORM; 

use Sonata\MediaBundle\Admin\ORM\MediaAdmin as Admin; 
// .. Other use statements 

class MediaAdmin extends Admin { 

    /** 
    * {@inheritdoc} 
    */ 
    protected function configureFormFields(FormMapper $formMapper) { 
     $media = $this->getSubject(); 

     if (! $media) { 
      $media = $this->getNewInstance(); 
     } 

     if (! $media || ! $media->getProviderName()) { 
      return; 
     } 

     $formMapper->add('providerName', 'hidden'); 

     $formMapper->getFormBuilder()->addModelTransformer(new ProviderDataTransformer($this->pool, $this->getClass()), true); 

     $provider = $this->pool->getProvider($media->getProviderName()); 

     if ($media->getId()) { 
      $provider->buildEditForm($formMapper); 
     } else { 
      $provider->buildCreateForm($formMapper); 
     } 

    } 

}