Symfony2 DoctrineBehaviors,JordiLlonchCrudGeneratorBundle,LexikFormFilterBundle问题

时间:2015-08-08 02:31:15

标签: symfony

我使用DoctrineBehaviors来应用我的实体的翻译,使用JordiLlonchCrudGenerator来生成我的crud,使用LexikFormFilterBundle生成我的表单过滤器类型。

我的表单类型

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

当我尝试过滤我的实体时,错误说没有在Class Entity \ Page中标题为title的字段。 我理解这个问题,但我不知道如何解决这个错误,因为字段标题是实体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')
                                            ;

任何解决方案?

此外,我为每个实体创建了一个垃圾箱,例如,如果删除了一个页面,则用户可以在垃圾箱中找到它,

例如:http://snapplr.com/snap/xxmk

所以我对动作恢复没有任何问题,但删除所有功能

这是我的行动

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

我想做的是删除所有已删除的部分,其中的部分DeletedAt不为空,我该怎么做?

谢谢//

1 个答案:

答案 0 :(得分:0)

这是我的实体页面类



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