我试图在我的奏鸣曲管理列表中实现一个可排序的系统。 我关注此文档:https://sonata-project.org/bundles/admin/master/doc/cookbook/recipe_sortable_listing.html 但它没有工作。
这是我的配置: 我的实体字段
* @Gedmo\SortablePosition
* @ORM\Column(name="rank", type="integer")
*/
protected $rank;
我的service.yml:
services:
gedmo.listener.sortable:
class: Gedmo\Sortable\SortableListener
tags:
- { name: doctrine.event_subscriber, connection: default }
calls:
- [ setAnnotationReader, [ "@annotation_reader" ] ]
app.admin.client:
class: AppBundle\Admin\ClientAdmin
tags:
- { name: sonata.admin, manager_type: orm, label: "Clients" }
arguments:
- ~
- AppBundle\Entity\Client
- 'PixSortableBehaviorBundle:SortableAdmin'
stof_doctrine_extensions:
orm:
default:
sortable: true
我对Sonata的问题忠告编辑:
class Question extends Admin
{
public $last_position = 0;
private $positionService;
protected $datagridValues = array(
'_page' => 1,
'_sort_by' => 'ASC',
'_sort_order' => 'position',
);
public function setPositionService(PositionHandler $positionHandler)
{
$this->positionService = $positionHandler;
}
protected function configureRoutes(RouteCollection $collection)
{
$collection->add('move', $this->getRouterIdParameter().'/move/{position}');
}
/**
* @param DatagridMapper $datagridMapper
*/
protected function configureDatagridFilters(DatagridMapper $datagridMapper)
{
$datagridMapper
->add('headline')
->add('body')
->add('category')
->add('slug');
}
/**
* @param ListMapper $listMapper
*/
protected function configureListFields(ListMapper $listMapper)
{
$listMapper
->addIdentifier('id')
->add('headline', null, array(
'identifier' => true,
'label' => 'Titres',
))
->add('category', null, array(
'label' => 'Catégories',
))
->add('position')
->add('_action', 'actions', array(
'actions' => array(
'edit' => array(),
'delete' => array(),
'move' => array('template' => 'PixSortableBehaviorBundle:Default:_sort.html.twig'),
),
'label' => 'Actions',
));
}
/**
* @param FormMapper $formMapper
*/
protected function configureFormFields(FormMapper $formMapper)
{
$formMapper
->add('headline', null, array(
'attr' => array('class' => 'span12'),
'label' => 'Questions',
))
->add('body', null, array(
'required' => false,
'label' => 'Réponses',
'attr' => array('class' => 'span12'),
))
->add('category', null, array(
'expanded' => true,
'required' => true,
'label' => 'Catégories',
'attr' => array('class' => 'radio-list vertical'),
))
->add('position', 'hidden', array(
'required' => true,
'attr' => array('class' => 'span12'),
'label' => 'Rang',
'data' => 1,
))
->add('slug', null, array(
'required' => false,
'attr' => array('class' => 'span12'),
))
->end();
}
}
我有这个错误:
Call to undefined method AppBundle\Entity\Faq\Question::getPosition()
答案 0 :(得分:1)
1。 您必须为数据库字段位置命名
2。
在您的实体use Gedmo\Mapping\Annotation as Gedmo;
3
/*
* @Gedmo\SortablePosition
* @ORM\Column(name="position", type="integer", nullable=false)
*/
private $position;
4。 为它创建setter和getter
5。
使用作曲家StofDoctrineExtensionsBundle
和PixSOrtableBehaviorBundle
6。 并在AppKernel中使用它们
$bundles = array(
...
new Stof\DoctrineExtensionsBundle\StofDoctrineExtensionsBundle(),
new Pix\SortableBehaviorBundle\PixSortableBehaviorBundle(),
);
7。
在services.yaml
中启用gedmo侦听器
gedmo.listener.sortable:
class: Gedmo\Sortable\SortableListener
tags:
- { name: doctrine.event_subscriber, connection: default }
calls:
- [ setAnnotationReader, [ "@annotation_reader" ] ]
(坚持正确的缩进,否则你的听众将无法工作)
8。 在您的管理服务中,连接新的可排序行为并激活呼叫
admin.something:
class: AppBundle\Admin\SomethingAdmin
tags:
- { name: sonata.admin, manager_type: orm, label: Articles }
arguments:
- ~
- AppBundle\Entity\Something
- 'PixSortableBehaviorBundle:SortableAdmin'
calls:
- [setPositionService, ["@pix_sortable_behavior.position"]]
(按照正确的缩进,否则它将无效并会引发一些奇怪的错误)
9。
在config.yml
中配置您的stof-doctrine-extenstions包:
stof_doctrine_extensions:
orm:
default:
sortable: true
(sortable在教程中默认缩进,显示错误)
享受:)