2016-02-03 72 views
1

我打算使用管理员奏鸣曲为我的项目之一,所以现在我正在测试其功能。我想为Sonata的邮政实体(SonataNewsBundle)添加一个新字段。索纳塔管理:新字段添加到实体后

例如,我想添加一个新的复选框(称为“破”),新闻标记为最新新闻。

索纳塔管理员是一个伟大的软件,但它真的缺少文档。我已经看过官方网站上的文档,但我不知道该怎么做才能完成此任务。

什么是步骤添加一个新的布尔字段(打破)到Sonata管理员发布实体? 如何我可以做到这一点?

预先感谢您。


P.S:我附上一个标准的索纳塔联系截图与现有的“启用”现场。我希望有一个类似的领域被标记为打破的新闻。我不需要使用标签(或任何其他分类系统)或基于类别的分类 - 只需将复选框标记或取消将邮政实体标记为中断。 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 

奏鸣曲:管理员:生成命令生成基于给定的模型类的新管理类,其注册为一项服务并可能创建一个新的控制器。作为一个参数,你需要指定完全限定的模型类。在交互模式下,所有传递的参数和选项都被用作默认值。您可以使用--no-interaction选项禁用交互模式。

选项包括:

:包名称

管理员(默认值由给定的模型 类,例如“YourNSFooBundle”测定):admin类基名(由默认情况下,这会将“Admin”添加到模型类名称,例如“BarAdmin”)

控制器:控制器类基本名称(默认情况下增加了“AdminController”到模型类的名称,如“BarAdminController”)

经理:模型管理器类型(默认情况下这是第一个注册的模型管理器类型,例如“ORM”)

服务:服务YAML文件(默认值是“services.yml”或“admin.yml”,如果它已经存在)

ID:管理服务ID(默认值是像“your_ns_foo.admin.bar”包名称和管理类的基本名称的组合)

+0

这可能是一个愚蠢的问题,但是,我可以使用这种方法,而编辑日e现有的实体src/Application/Sonata/NewsBundle/Entity/Post.php,然后按照您在答案中提供的步骤,生成Admin类等等?非常感谢你。 –

+0

Admin类表示您的模型到每个管理操作的映射。在其中,您可以决定要在列表中显示哪些字段,哪些字段用作过滤器或要在创建或版本表单中显示哪些字段。 –

+0

对不起,要求问愚蠢的问题,但我thjink我把它都弄错了...... --- >你必须添加您的布尔字段到您的实体 **我应该在哪里添加此字段?**让我们说我有一个全新的[Sonata Admin的沙箱](https://sonata-project.org/get-started)。网络应用程序使用默认设置正常工作。 --- >并将该字段添加到您的管理员表单映射器并设置适当的字段类型 **哪里**我应该这样做? –