2016-04-05 25 views
0

Sonata admin listemde sortable bir sistem uygulamaya çalışıyorum. Bu belgeleri takip ediyorum: https://sonata-project.org/bundles/admin/master/doc/cookbook/recipe_sortable_listing.html Ama çalışmıyor. İşte Sonata Admin - Yönetici listelendiğinde sıradan davranış

benim yapılandırma geçerli: My varlık alanı

* @Gedmo\SortablePosition 
* @ORM\Column(name="rank", type="integer") 
*/ 
protected $rank; 

Benim 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 My QuestionAdmin DÜZENLEME:

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(); 
    } 
} 

bu var hata: Call to undefined method AppBundle\Entity\Faq\Question::getPosition()

+1

"rank" yerine "position" alan adınızı değiştirmeyi denediniz mi? – paulgv

+1

Sadece yaptım. Şuan çalışıyor. Düğmeleri görüyorum ama ok düğmesine tıkladığımda bu hatayı aldım."Denetleyici" Sonata \ AdminBundle \ Controller \ CRUDController :: moveAction "URI için"/admin/fm/app/faq-question/4/move/up "callable değil" – Kevin

+0

Doktora göre, aşağıdakileri eklemeniz gerekir admin sınıfının yöntemleri ve özellikleri: '$ last_position',' $ positionService', 'datagridValues',' setPositionService() 've' configureRoutes() '. – paulgv

cevap

1

1. Sen use Gedmo\Mapping\Annotation as Gedmo;

3.

/* 
* @Gedmo\SortablePosition 
* @ORM\Column(name="position", type="integer", nullable=false) 
*/ 
private $position; 

4. bunun

için belirleyici ve gaz giderici oluşturabilir, varlıkta da DB saha pozisyonu

2. isim vermek zorunda

5. Kur ve kur besteci StofDoctrineExtensionsBundle ve PixSOrtableBehaviorBundle

6. ve AppKernel bunları kullanmak ile figür kullanılabilir olmasını doğru girinti için

gedmo.listener.sortable: 
    class: Gedmo\Sortable\SortableListener 
    tags: 
     - { name: doctrine.event_subscriber, connection: default } 
    calls: 
     - [ setAnnotationReader, [ "@annotation_reader" ] ] 

(sopa gedmo dinleyici etkinleştirmek services.yaml yılında

$bundles = array(
    ... 
    new Stof\DoctrineExtensionsBundle\StofDoctrineExtensionsBundle(), 
    new Pix\SortableBehaviorBundle\PixSortableBehaviorBundle(), 
); 

7. başka kimse dinleyiciniz çalışmayacak)

Yönetici hizmeti 8. yeni sıralanabilir davranışı bağlamak ve aktive aramalar

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"]] 

(bazı garip hata işe yaramaz başka uygun girinti takip edip atacağım)

9. config.yml yapılandırmak içinde senin stof-doktrin-extenstions paket:

stof_doctrine_extensions: 
     orm: 
      default: 
       sortable: true 

(sıralanabilir yanlış gösterilmiştir öğretici varsayılan altında girintili olur)

Tadını çıkarın :)

İlgili konular