Symfony2 기본 선택 필드 선택 설정
다음과 같은 방식으로 양식을 작성하고 있습니다.
$form = $this->createFormBuilder($breed)
->add('species', 'entity', array(
'class' => 'BFPEduBundle:Item',
'property' => 'name',
'query_builder' => function(ItemRepository $er){
return $er->createQueryBuilder('i')
->where("i.type = 'species'")
->orderBy('i.name', 'ASC');
}))
->add('breed', 'text', array('required'=>true))
->add('size', 'textarea', array('required' => false))
->getForm()
종 목록 상자의 접근을 접근 할 수 있습니까?
답변 해주셔서 감사합니다. 죄송합니다. 제 질문을 바꿔야 할 것입니다. 모델에서 검색 한 값이 있으면 종 선택 목록의 해당 값에 해당 값을 SELECTED = "yes"로 설정 설정?
따라서 TWIG보기의 선택 옵션 출력은 다음과 같이 나타납니다.
<option value="174" selected="yes">Dog</option>
Cristian의 솔루션 을 사용하는 경우 FormType EntityManager
클래스 를 삽입해야합니다 . 다음은 간단한 예입니다.
class EntityType extends AbstractType{
public function __construct($em) {
$this->em = $em;
}
public function buildForm(FormBuilderInterface $builder, array $options){
$builder
->add('MyEntity', 'entity', array(
'class' => 'AcmeDemoBundle:Entity',
'property' => 'name',
'query_builder' => function(EntityRepository $er) {
return $er->createQueryBuilder('e')
->orderBy('e.name', 'ASC');
},
'data' => $this->em->getReference("AcmeDemoBundle:Entity", 3)
));
}
}
그리고 컨트롤러 :
// ...
$form = $this->createForm(new EntityType($this->getDoctrine()->getManager()), $entity);
// ...
에서 교리 문서 :
EntityManager # getReference ($ entityName, $ identifier) 메소드를 사용하면 데이터베이스에서 사용하는 모든 것을 사용할 수 있습니다. 이는 예를 들어 식별자가있는 엔터티에 대한 연결을 설정하려는 경우 성능 향상으로 유용합니다.
'data'속성에서 언어를 정의 할 수 있습니다. 이 추상 "필드"유형 ( http://symfony.com/doc/2.0/reference/forms/types/field.html )의 일부 입니다.
$form = $this->createFormBuilder()
->add('status', 'choice', array(
'choices' => array(
0 => 'Published',
1 => 'Draft'
),
'data' => 1
))
->getForm();
이 예에서는 '초안'이 기본 선택 값으로 설정됩니다.
"데이터"옵션을 사용하지만 값은 유형입니다. 즉 :
$em = $this->getDoctrine()->getEntityManager();
->add('sucursal', 'entity', array
(
'class' => 'TestGeneralBundle:Sucursal',
'property'=>'descripcion',
'label' => 'Sucursal',
'required' => false,
'data'=>$em->getReference("TestGeneralBundle:Sucursal",3)
))
$breed->setSpecies($species)
예를 들어 다음과 같은 형식으로 사용 하면됩니다.
$m = new Member();
$m->setBirthDate(new \DateTime);
$form = $this->createForm(new MemberType, $m);
내 기본 선택을 현재 날짜로 설정합니다. 외부와 동일한 방식으로 작동해야합니다.
Doctrine 배열을 전달하려는 다음과 같이 시도하십시오 (Symfony 3.0 이상) :
protected $entities;
protected $selectedEntities;
public function __construct($entities = null, $selectedEntities = null)
{
$this->entities = $entities;
$this->selectedEntities = $selectedEntities;
}
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder->add('entities', 'entity', [
'class' => 'MyBundle:MyEntity',
'choices' => $this->entities,
'property' => 'id',
'multiple' => true,
'expanded' => true,
'data' => $this->selectedEntities,
]);
}
data
이상을 수행하기 때문에 옵션 을 사용할 생각하지 않습니다 . 또한 생성 중에 양식에 전달되는 모든 데이터를 재정의합니다. 따라서 기본적으로 해당 기능에 대한 지원이 중단됩니다. -사용자가 데이터를 생성 할 때 중요하지 않을 양식을 업데이트 할 때 중요합니다.
참조 http://symfony.com/doc/current/reference/forms/types/choice.html#data를
양식 작성 중에 기본 데이터를 전달하는 것이 더 낫다고 생각합니다. 컨트롤러에서.
예를 들어, 클래스를 전달하고 클래스에서 언어를 정의 할 수 있습니다. (사용시 Symfony\Bundle\FrameworkBundle\Controller\Controller
)
$form = $this->createForm(AnimalType::class, [
'species' => 174 // this id might be substituted by an entity
]);
또는 개체를 사용할 때 :
$dog = new Dog();
$dog->setSpecies(174); // this id might be substituted by an entity
$form = $this->createForm(AnimalType::class, $dog);
공장을 사용할 때 더 좋습니다 : (개가 동물에서 확장되는 곳)
$form = $this->createForm(AnimalType::class, DogFactory::create());
이렇게하면 양식 구조와 콘텐츠를 서로 분리하고 더 많은 상황에서 양식을 보완 할 수 있습니다.
또는 preferred_choices
옵션을 사용 하지만 기본 옵션을 양식 맨 위로 이동하는 부작용이 있습니다.
참조 : http://symfony.com/doc/current/reference/forms/types/choice.html#preferred-choices
$builder->add(
'species',
'entity',
[
'class' => 'BFPEduBundle:Item',
'property' => 'name',
'query_builder' => ...,
'preferred_choices' => [174] // this id might be substituted by an entity
]
);
양식 클래스를 사용하여 양식을 사용할 때 Symfony가 목록에서 올바른 옵션을 선택하는 것을 처리합니다. 여기서 뭘 잘못하고 있는지 잘 모르겠습니다. 다음은 작동하는 내 양식 중 하나의 예입니다.
편집 작업을위한 컨트롤러에서 :
$entity = $em->getRepository('FooBarBundle:CampaignEntity')->find($id);
if (!$entity) {
throw $this->createNotFoundException('Unable to find CampaignEntity entity.');
}
$editForm = $this->createForm(new CampaignEntityType(), $entity);
$deleteForm = $this->createDeleteForm($id);
return $this->render('FooBarBundle:CampaignEntity:edit.html.twig', array(
'entity' => $entity,
'edit_form' => $editForm->createView(),
'delete_form' => $deleteForm->createView(),
));
캠페인 유형 클래스 (src : Foo \ BarBundle \ Form \ CampaignEntityType.php) :
namespace Foo\BarBundle\Form;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilder;
use Doctrine\ORM\EntityRepository;
class CampaignEntityType extends AbstractType
{
public function buildForm(FormBuilder $builder, array $options)
{
$builder
->add('store', 'entity', array('class'=>'FooBarBundle:Store', 'property'=>'name', 'em'=>'my_non_default_em','required' => true, 'query_builder' => function(EntityRepository $er) {return $er->createQueryBuilder('s')->orderBy('s.name', 'ASC');}))
->add('reward');
}
public function getName()
{
return 'foo_barbundle_campaignentitytype';
}
}
문서에서 :
public Form createNamed(string|FormTypeInterface $type, string $name, mixed $data = null, array $options = array())
혼합 $ data = null이 기본 옵션입니다. 예를 들어 상태라는 필드가 및 다음과 같이 구현했습니다.
$default = array('Status' => 'pending');
$filter_form = $this->get('form.factory')->createNamedBuilder('filter', 'form', $default)
->add('Status', 'choice', array(
'choices' => array(
'' => 'Please Select...',
'rejected' => 'Rejected',
'incomplete' => 'Incomplete',
'pending' => 'Pending',
'approved' => 'Approved',
'validated' => 'Validated',
'processed' => 'Processed'
)
))->getForm();
symfony2 라디오 버튼의 기본 선택 설정
$builder->add('range_options', 'choice', array(
'choices' => array('day'=>'Day', 'week'=>'Week', 'month'=>'Month'),
'data'=>'day', //set default value
'required'=>true,
'empty_data'=>null,
'multiple'=>false,
'expanded'=> true
))
양식은 매핑 선택한 필드에 종-> id 값을 자동으로 선택해야합니다. 예를 들어 'breed_species'조인 테이블에서 Species라는 의미와 OnetoOne 관계가있는 Breed라는 의미가있는 경우 :
class Breed{
private $species;
/**
* @ORM\OneToOne(targetEntity="BreedSpecies", mappedBy="breed")
*/
private $breedSpecies;
public function getSpecies(){
return $breedSpecies->getSpecies();
}
private function getBreedSpecies(){
return $this->$breedSpecies;
}
}
양식 클래스의 'species'필드는 양식에 전달 된 Breed 클래스의 'species'속성 개체에서 species-> id 값을 선택해야합니다.
또는 SetData ()를 사용하여 종소리를 양식에 명시 적으로 전달하여 값을 명시 적으로 수 있습니다.
$breedForm = $this->createForm( new BreedForm(), $breed );
$species = $breed->getBreedSpecies()->getSpecies();
$breedForm->get('species')->setData( $species );
return $this->render( 'AcmeBundle:Computer:edit.html.twig'
, array( 'breed' => $breed
, 'breedForm' => $breedForm->createView()
)
);
이 양식을 사용하여 편집하려는 모델에 올바른 기본값을 정의하거나 코드가 다음과 같이되도록 empty_data 옵션을 지정할 수 있습니다 .
$form = $this
->createFormBuilder($breed)
->add(
'species',
'entity',
array(
'class' => 'BFPEduBundle:Item',
'property' => 'name',
'empty_data' => 123,
'query_builder' => function(ItemRepository $er) {
return $er
->createQueryBuilder('i')
->where("i.type = 'species'")
->orderBy('i.name', 'ASC')
;
}
)
)
->add('breed', 'text', array('required'=>true))
->add('size', 'textarea', array('required' => false))
->getForm()
;
"preferred_choices"를 사용하고 선택하려는 이름을 목록의 맨 위로 "푸시"할 수 있습니다. 그러면 기본적으로 선택됩니다.
'preferred_choices' => array(1), //1 is item number
참고 URL : https://stackoverflow.com/questions/8073236/symfony2-setting-a-default-choice-field-selection
'ProgramingTip' 카테고리의 다른 글
정확한 n 개의 요소가 집합의 모든 하위 집합을 어떻게 사용할 수 있습니까? (0) | 2020.11.06 |
---|---|
긴 어깨의 10 자만 표시 하시겠습니까? (0) | 2020.11.06 |
Heroku : Free size dyno를 1 개 이상 사용할 수 없습니다. (0) | 2020.11.06 |
T-SQL을 사용하여 초를 HH : MM : SS로 변환하는 방법 (0) | 2020.11.06 |
jQuery로 div를 숨기는 방법? (0) | 2020.11.06 |