2015-08-08 2 views
0

Я использую DoctrineBehaviors, чтобы применить перевод моей сущности, и JordiLlonchCrudGenerator для генерации моей crud, и LexikFormFilterBundle для создания типа фильтров форм.Symfony2 DoctrineBehaviors, JordiLlonchCrudGeneratorBundle, LexikFormFilterBundle issue

Моя форма Тип

class PageFilterType extends AbstractType 
 
{ 
 
    public function buildForm(FormBuilderInterface $builder, array $options) 
 
    { 
 
     $builder 
 
       ->add('title', 'filter_text') 
 
       ->add('content', 'filter_text') 
 
       ; 
 
     $listener = function(FormEvent $event) 
 
     { 
 
      // Is data empty? 
 
      foreach ($event->getData() as $data) { 
 
       if(is_array($data)) { 
 
        foreach ($data as $subData) { 
 
         if(!empty($subData)) return; 
 
        } 
 
       } 
 
       else { 
 
        if(!empty($data)) return; 
 
       } 
 
      } 
 

 
      $event->getForm()->addError(new FormError('Filter empty')); 
 
     }; 
 
     $builder->addEventListener(FormEvents::POST_BIND, $listener); 
 
    }

Когда я пытаюсь фильтров мои сущностей, сказал ошибка шляпка не поле, называемое название в классе Entity \ Page. Я понимаю эту проблему, но я понятия не имею, как разрешить эту ошибку, потому что название поля в сущности PageTranslation, здесь мои функциональные фильтры:

protected function filter() 
 
    { 
 
     $request = $this->getRequest(); 
 
     $session = $request->getSession(); 
 
     $filterForm = $this->createForm(new PageFilterType()); 
 
     $em = $this->getDoctrine()->getManager(); 
 
     $queryBuilder = $em->getRepository('PageBundle:Page') 
 
               ->createQueryBuilder('e') 
 
               ->select('e') 
 
               ->where('e.deletedAt IS NULL') 
 
              ; 
 

 
     // Reset filter 
 
     if ($request->get('filter_action') == 'reset') { 
 
      $session->remove('PageControllerFilter'); 
 
     } 
 

 
     // Filter action 
 
     if ($request->get('filter_action') == 'filter') { 
 
      // Bind values from the request 
 
      $filterForm->bind($request); 
 

 
      if ($filterForm->isValid()) { 
 
       // Build the query from the given form object 
 
       $this->get('lexik_form_filter.query_builder_updater')->addFilterConditions($filterForm, $queryBuilder); 
 
       // Save filter to session 
 
       $filterData = $filterForm->getData(); 
 
       $session->set('PageControllerFilter', $filterData); 
 
      } 
 
     } else { 
 
      // Get filter from session 
 
      if ($session->has('PageControllerFilter')) { 
 
       $filterData = $session->get('PageControllerFilter'); 
 
       $filterForm = $this->createForm(new PageFilterType(), $filterData); 
 
       $this->get('lexik_form_filter.query_builder_updater')->addFilterConditions($filterForm, $queryBuilder); 
 
      } 
 
     } 
 

 
     return array($filterForm, $queryBuilder); 
 
    }

Я думаю, что я должен настроить эта линия, но я не знаю, как

$queryBuilder = $em->getRepository('PageBundle:Page') 
 
               ->createQueryBuilder('e') 
 
               ->select('e') 
 
               ->where('e.deletedAt IS NULL') 
 
              ;

Любое решение для этого?

Кроме того, я создал мусор для каждого объекта, для Exemple, если одна страница будет удалена, пользователь может найти его на помойку,

Exemple: http://snapplr.com/snap/xxmk

Так я не имею никаких проблем с действием ReStore все, но удалить все не функционален

Это мое действие

public function emptyTrashAction(){ 
 
     $em = $this->getDoctrine()->getEntityManager(); 
 
     $entities=$em->getRepository('PageBundle:Page')->findByRemoved(); 
 
     if($entities){ 
 
      foreach ($entities as $entity) { 
 
       $em->remove($entity); 
 
       $em->flush(); 
 
      } 
 
      $this->get('session')->getFlashBag()->add('success', 'La corbeille est vide !!'); 
 
      return $this->redirect($this->generateUrl('pa_trash')); 
 
     }else{ 
 
      $this->get('session')->getFlashBag()->add('error', 'La corbeille est déjà vide !! '); 
 
      return $this->redirect($this->generateUrl('pa')); 
 
     } 
 
     
 
     
 
    }

Что я хочу сделать, это удалить все объекты, где feild DeletedAt не пуст, как я могу это сделать?

Благодаря //

+0

Не могли бы вы опубликовать свой класс сущности? Я думаю, что сначала вы забыли поместить поле заголовка внутри, в php-классе, если аннотация или в файл yml или xml, вы должны сначала проверить эти файлы. –

ответ

0

Это моя сущность Page Класс

use Doctrine\ORM\Mapping as ORM; 
 
use Doctrine\Common\Collections\ArrayCollection; 
 
use Doctrine\Common\Collections\Collection; 
 
use Knp\DoctrineBehaviors\Model as ORMBehaviors; 
 

 

 
/** 
 
* Page 
 
* @ORM\Table(name="page") 
 
* @ORM\Entity(repositoryClass="Core\PageBundle\Entity\PageRepository") 
 
* 
 
*/ 
 
class Page 
 
{ 
 
     use ORMBehaviors\Translatable\Translatable; 
 
     use ORMBehaviors\Timestampable\Timestampable; 
 
     use ORMBehaviors\SoftDeletable\SoftDeletable; 
 
     use ORMBehaviors\Blameable\Blameable; 
 

 
    public function __call($method, $arguments) 
 
    { 
 
     return \Symfony\Component\PropertyAccess\PropertyAccess::createPropertyAccessor()->getValue($this->translate(), $method); 
 
    } 
 

 
    /** 
 
    * @var integer 
 
    * 
 
    * @ORM\Column(name="id", type="integer") 
 
    * @ORM\Id 
 
    * @ORM\GeneratedValue(strategy="AUTO") 
 
    */ 
 
    private $id; 
 

 
    /** 
 
    * @var integer 
 
    * 
 
    * @ORM\Column(name="nbview", type="integer", nullable=true) 
 
    */ 
 
    private $nbview; 
 

 
    /** 
 
    * Get id 
 
    * 
 
    * @return integer 
 
    */ 
 
    public function getId() 
 
    { 
 
     return $this->id; 
 
    } 
 

 
    /** 
 
    * Set nbview 
 
    * 
 
    * @param integer $nbview 
 
    * @return Page 
 
    */ 
 
    public function setNbview($nbview) 
 
    { 
 
     $this->nbview = $nbview; 
 

 
     return $this; 
 
    } 
 

 
    /** 
 
    * Get nbview 
 
    * 
 
    * @return integer 
 
    */ 
 
    public function getNbview() 
 
    { 
 
     return $this->nbview; 
 
    } 
 

 
    public function getUpdateLogMessage(array $changeSets = []) 
 
    { 
 
     return 'Changed: '.print_r($changeSets, true); 
 
    } 
 

 
    public function getRemoveLogMessage() 
 
    { 
 
     return 'removed!'; 
 
    }

И это класс перевод страницу

use Doctrine\ORM\Mapping as ORM; 
 
use Knp\DoctrineBehaviors\Model as ORMBehaviors; 
 

 
/** 
 
* @ORM\Table(name="page_lang") 
 
* @ORM\Entity() 
 
*/ 
 
class PageTranslation 
 
{ 
 
    use ORMBehaviors\Translatable\Translation; 
 
    use ORMBehaviors\Sluggable\Sluggable; 
 

 
    /** 
 
    * @inheritdoc 
 
    */ 
 
    public function getSluggableFields() 
 
    { 
 
     return ['title']; 
 
    } 
 
    /** 
 
    * @inheritdoc 
 
    */ 
 
    public function getSlug() 
 
    { 
 
     if (!$this->slug) { 
 
      $this->generateSlug(); 
 
     } 
 

 
     return $this->slug; 
 
    } 
 

 
    /** 
 
    * @var string $title 
 
    * 
 
    * @ORM\Column(name="title", type="string", length=255) 
 
    */ 
 
    private $title; 
 

 
    /** 
 
    * @var string $content 
 
    * 
 
    * @ORM\Column(name="content", type="text") 
 
    */ 
 
    private $content; 
 
    /** 
 
    * @var string $meta 
 
    * 
 
    * @ORM\Column(name="meta", type="text", nullable=true) 
 
    */ 
 
    private $meta; 
 

 
    public function getId(){ 
 
     return $ths->id; 
 
    } 
 

 
    /** 
 
    * Get title 
 
    * 
 
    * @return string 
 
    */ 
 
    public function getTitle() 
 
    { 
 
     return $this->title; 
 
    } 
 
    /** 
 
    * Set title 
 
    * 
 
    * @param string $title 
 
    * @return Page 
 
    */ 
 
    public function setTitle($title) 
 
    { 
 
     $this->title = $title; 
 

 
     return $this; 
 
    } 
 

 
    /** 
 
    * Set content 
 
    * 
 
    * @param string $content 
 
    * @return Page 
 
    */ 
 
    public function setContent($content) 
 
    { 
 
     $this->content = $content; 
 

 
     return $this; 
 
    } 
 

 
    /** 
 
    * Get content 
 
    * 
 
    * @return string 
 
    */ 
 
    public function getContent() 
 
    { 
 
     return $this->content; 
 
    } 
 
    /** 
 
    * @param $method 
 
    * @param $args 
 
    * 
 
    * @return mixed 
 
    */ 
 

 
    /** 
 
    * Set meta 
 
    * 
 
    * @param string $meta 
 
    * @return PageTranslation 
 
    */ 
 
    public function setMeta($meta) 
 
    { 
 
     $this->meta = $meta; 
 

 
     return $this; 
 
    } 
 

 
    /** 
 
    * Get meta 
 
    * 
 
    * @return string 
 
    */ 
 
    public function getMeta() 
 
    { 
 
     return $this->meta; 
 
    } 
 
}

Смежные вопросы