다음은 카테고리로 수행하는 방법입니다.
나는 CategoryRepository가 있음을 유의하십시오. FormType 클래스의 query_builder 옵션과 컨트롤러에서이 저장소의 메소드를 사용할 수 있습니다.
내 findAllCategories() 메서드는 쿼리 작성기 개체를 반환하므로 동일한 쿼리 작성기 개체의 스칼라 카운트를 반환하는 countCategories()라는 저장소에 다른 메서드를 포함 할 수 있습니다.
이렇게하면 내 컨트롤러의 카운트 메소드에 액세스 할 수 있으며, 해당 카테 고리가 카테고리를 찾기 위해 사용하는 쿼리 작성기와 일관성이 있는지 확인합니다.
이것은 매우 간단한 예이지만 joins 및 where 절을 사용하는 더 복잡한 finder 메소드가있는 경우보다 유용합니다. 내 컨트롤러에서
:
<?php
use Site\FrontendBundle\Form\Type\CategoryType;
public function indexAction()
{
$em = $this->getDoctrine()->getManager();
$repo = $em->getRepository('SiteFrontendBundle:Category');
$form = $this->createForm(new CategoryType());
$count = $repo->countAllCategories();
return $this->render('SiteFrontendBundle:Category:count.html.twig', array(
'form' => $form->createView(),
'count' => $count
));
}
내 양식 유형 :
<?php
namespace Site\FrontendBundle\Form\Type;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolverInterface;
use Site\FrontendBundle\Repository\CategoryRepository;
class CategoryType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('category', 'entity', array(
'class' => 'SiteFrontendBundle:Category',
'property' => 'title',
'query_builder' => function(CategoryRepository $cr) {
return $cr->findAllCategories();
}
))
;
}
public function setDefaultOptions(OptionsResolverInterface $resolver)
{
$resolver->setDefaults(array(
'data_class' => 'Site\FrontendBundle\Entity\Category'
));
}
public function getName()
{
return 'category_type';
}
}
내 카테고리 저장소에 : 당신은 질문이있는 경우
<?php
namespace Site\FrontendBundle\Repository;
use Doctrine\ORM\EntityRepository;
class CategoryRepository extends EntityRepository
{
public function findAllCategories()
{
return $this->createQueryBuilder('c')
->orderBy('c.lft', 'ASC')
;
}
public function countAllCategories()
{
return $this
->findAllCategories()
->select('COUNT(c.id)')
->getQuery()
->getSingleScalarResult()
;
}
}
알려주세요.
안녕하세요. 윌리엄스, 답장을 보내 주셔서 감사합니다. 해당 필드의 ** choice_list ** 옵션에 직접 액세스하는 솔루션을 찾았습니다. '$ form-> get ("field_name") -> getConfig() -> getOption ('choice_list') -> getChoices()'하지만 데이터베이스에 대한 두 번째 액세스가 발생합니다. 솔루션은 또한 데이터베이스에 대한 두 가지 요청을하지만 사용 가능한 범주의 수를 계산하는 데만 사용됩니다. 누군가가 더 나은 방법을 제안 할 때까지 귀하의 솔루션을 계속 사용하겠습니다. 나는 아직도 이것을 달성하는 우아한 방법이 있다고 생각한다. 고마워 –