2016-02-03 6 views
1

Я планирую использовать Sonata Admin для одного из моих проектов, поэтому сейчас я тестирую его функции. Я хотел бы добавить новое поле в сущность Sonata (SonataNewsBundle).Sonata Admin: Добавить новое поле в Post Entity

Например, я хочу добавить новый флажок (называемый «ломающий»), для новостей, помеченных как «Ломающие новости».

Sonata Admin - отличное программное обеспечение, но действительно не хватает документации. Я смотрел документы на официальном сайте, но я не знаю, что мне делать, чтобы выполнить эту задачу.

Что такое шаги, чтобы добавить новое булево поле (нарушение) в Sonata Admin Post entity? Как Могу ли я это сделать?

Благодарим вас заблаговременно.


P.S .: Я приложил скриншот стандартной Sonata администратора с существующий "включен" поле. Я хотел бы иметь похожее поле для новостей обозначенных как нарушение. Мне не нужно использовать тег (или любую другую систему классификации) или классификацию по категориям - это только флажок, который будет отмечать или отменять объект Post как нарушение. enter image description here

ответ

1

«---> Вы должны добавить логическое поле для ваше предприятие Где я должен добавить поле» Например:

// src/AppBundle/Entity/Product.php 
namespace AppBundle\Entity; 

use Doctrine\ORM\Mapping as ORM; 

/** 
* @ORM\Entity 
* @ORM\Table(name="product") 
*/ 
class Product 
{ 
    /** 
    * @ORM\Column(type="integer") 
    * @ORM\Id 
    * @ORM\GeneratedValue(strategy="AUTO") 
    */ 
    protected $id; 

    /** 
    * @ORM\Column(type="string", length=100) 
    */ 
    protected $name; 

    /** 
    * @ORM\Column(type="decimal", scale=2) 
    */ 
    protected $price; 

    /** 
    * @ORM\Column(type="text") 
    */ 
    protected $description; 

    /** 
    * @ORM\Column(type="bool") 
    */ 
    protected $isVisible; 
} 

В своем классе администратора:

<?php 
// src/AppBundle/Admin/ProductAdmin.php 

namespace AppBundle\Admin; 

use Sonata\AdminBundle\Admin\Admin; 
use Sonata\AdminBundle\Show\ShowMapper; 
use Sonata\AdminBundle\Form\FormMapper; 
use Sonata\AdminBundle\Datagrid\ListMapper; 
use Sonata\AdminBundle\Datagrid\DatagridMapper; 

class ProductAdmin extends Admin 
{ 
    // Fields to be shown on create/edit forms 
    protected function configureFormFields(FormMapper $formMapper) 
    { 
     $formMapper 
      ->add('name', 'text', array(
       'label' => 'Product Name' 
      )) 
      ->add('price', 'decimal', array(
       'label' => 'Product Price' 
      )) 

      // if no type is specified, SonataAdminBundle tries to guess it 
      ->add('description') 
      ->add('isVisible', 'bool', array(
       'label' => 'Is Product visible' 
      )) 

      // ... 
     ; 
    } 
    // Fields to be shown on filter forms 
protected function configureDatagridFilters(DatagridMapper $datagridMapper) 
{ 
    $datagridMapper 
     ->add('name') 
     ->add('price') 
    ; 
} 

// Fields to be shown on lists 
protected function configureListFields(ListMapper $listMapper) 
{ 
    $listMapper 
     ->addIdentifier('name') 
     ->add('price') 
    ; 
} 

// Fields to be shown on show action 
protected function configureShowFields(ShowMapper $showMapper) 
{ 
    $showMapper 
     ->add('name') 
     ->add('price') 
     ->add('isVisible') 
    ; 
} 
} 
1

Вы должны добавить логическое поле для вашей организации

/** 
    * @ORM\Column(type="bool") 
    */ 
    protected $is_visible; 

и добавить поле в форму администратора картографа и установить apropriate тип поля, , например:

$formMapper 
      ->add('is_visible', 'bool', array(
       'label' => 'Title' 
      )) 

Если тип не указан, SonataAdminBundle пытается угадать его. Documentation

Кроме того, вы можете создать администратор класса от существующего объекта:

php app/console sonata:admin:generate YourNS/FooBundle/Entity/Bar 

The сонаты: админ: генерировать команду создает новый класс администратора на основе данной модели класса, регистрирует его в качестве службы и потенциально создает новый контроллер. В качестве аргумента вам необходимо указать полный класс модели. Все переданные аргументы и опции используются в качестве значений по умолчанию в интерактивном режиме. Вы можете отключить интерактивный режим с помощью опции -no-взаимодействия.

Варианты:

расслоение: имя расслоения (значение по умолчанию определяется данной модели класса, например, «YourNSFooBundle»)

админ: класс администратора базового каталога (по default добавляет «Admin» к имени класса модели, например«BarAdmin»)

контроллер: класс контроллера базовое имя (по умолчанию это добавляет «AdminController» в названии модели класса, например, «BarAdminController»)

менеджер: тип менеджера модели (по умолчанию это первый зарегистрированный тип модели менеджера, например, «ОРМ»)

услуги: файл услуги YAML (значение по умолчанию «services.yml» или «admin.yml», если он уже существует)

идентификатор: админ идентификатор службы (значение по умолчанию является сочетанием имени расслоения и администратор класса, как базовое имя «your_ns_foo.admin.bar»)

+0

Это может быть глупый вопрос, но могу ли я использовать этот подход, в то время как РЕДАКТИРОВАНИЕ тыс существующий объект src/Application/Sonata/NewsBundle/Entity/Post.php, а затем выполните действия, указанные в ответе, создав класс администратора и т. д.? Большое спасибо. –

+0

Класс Admin представляет собой отображение вашей модели для каждого действия администрации. В нем вы определяете, какие поля показывать в листинге, который следует использовать в качестве фильтров или что показывать в форме создания или выпуска. –

+0

Извините за kepping, задавая глупые вопросы, но я thjink, я получил все это неправильно ... --- > Вы должны добавить свое логическое поле к своей сущности ** Где я должен добавить это поле? ** Предположим, У меня есть новая установка песочницы [Sonata Admin] (https://sonata-project.org/get-started). Веб-приложение отлично работает с настройками по умолчанию. --- > и добавьте поле в свой файл формы администратора и установите подходящий тип поля ** Где ** я должен это сделать? –