2011-08-23 16 views
9

मैं सिम्फनी 2 में डेटाबेस तालिका से मूल्यों के साथ एक चयन सूची कैसे बना सकता हूं?सिम्फनी 2 फॉर्म चुनिंदा सूची के साथ

2 संस्थाओं है: छात्र और कक्षा एक ManyToOne रिश्ते के साथ और मैं folowing क्षेत्रों के साथ एक फार्म बनाने की जरूरत: सूची का चयन नाम, उपनाम, उम्र, कक्षा (उपलब्ध वर्गों से)।

मेरी छात्र फार्म में मेरे पास है

$builder 
     ->add('name') 
     ->add('surname') 
     ->add('age') 
     ->add('classroom', new ClassroomType()) 
    ; 

मेरी कक्षा फार्म में मैं इस है:

$classrooms =$this->getDoctrine()->getRepository('UdoCatalogBundle:Classroom')->findAll(); 
    $builder 
     ->add('clasa','choice',array('choices' => array($classrooms->getId() => $classrooms->getName()))); 

मैं इस निम्न त्रुटि मिलती है:

Fatal error: Call to undefined method Udo\CatalogBundle\Form\ClassroomType::getDoctrine() in /var/www/html/pos/src/Udo/CatalogBundle/Form/ClassroomType.php on line 13   

तरह विनम्र, सीरनौ दान

+0

यहाँ एक स्पष्टीकरण है: http://groups.google.com/group/symfony2/browse_thread/thread/ da8f72b33f9f93ba – tttony

उत्तर

24

सुनिश्चित नहीं है कि आपको अभी तक कोई जवाब मिला है, लेकिन मुझे बस अपनी परियोजना के लिए इसे समझने के लिए कुछ खोदना पड़ा।

फॉर्म वर्ग को नियंत्रक की तरह सिद्धांत का उपयोग करने के लिए सेट नहीं किया गया है, इसलिए आप उसी तरह से इकाई का संदर्भ नहीं दे सकते। आप क्या करना चाहते हैं entity Field Type का उपयोग करें जो एक विशेष विकल्प फ़ील्ड प्रकार है जो आपको एक सिद्धांत इकाई से विकल्प लोड करने की इजाजत देता है जैसा आप करने की कोशिश कर रहे हैं।

ठीक है इतनी लंबी कहानी छोटी है। इसके बजाय क्या आप चुनाव क्षेत्र बनाने के लिए कर रहे हैं, ऐसा करते हैं:

->add('category', 'entity', array(
    'class' => 'VendorWhateverBundle:Category', 
    'query_builder' => function($repository) { return $repository->createQueryBuilder('p')->orderBy('p.id', 'ASC'); }, 
    'property' => 'name', 
)) 

मैं अगर आप एक भंडार या क्या में query_builder समारोह बन सकता था यकीन नहीं है, मैं एक तरह से मैं के रूप में बेतहाशा झूलते कर रहा हूँ चले जाओ। इस बिंदु तक मैंने उपरोक्त से जुड़े दस्तावेज़ों को स्पष्ट करना है कि क्या करना है। मुझे लगता है कि अगला कदम Doctrine's QueryBuilder पर पढ़ना है।

तुम वहाँ रहे हैं, वहीं मुझे लगता है कि आप थोड़ा जहां कक्षा रूप एम्बेड कर रहे हैं ड्रॉप करना चाहते हैं,

->add('classroom', new ClassroomType()) 

आप शायद अपने स्वयं के कक्षाओं बनाने लोग नहीं करना चाहती। जब तक आप नहीं करते, तब हाँ।

+0

हाँ, इकाई फ़ील्ड प्रकार की मुझे आवश्यकता है। – ziiweb

+0

आपने अभी मुझे बहुत सारे घंटे बचाए हैं, +1 –

0

तो संस्थाओं मैप की जाती हैं, इस या Symfony 2.8+ के लिए एक साफ समाधान 3+

<?php 

namespace My\AppBundle\Form\Type; 

use My\AppBundle\Entity\Student; 
use Symfony\Component\Form\AbstractType; 
use Symfony\Component\Form\FormBuilderInterface; 
use Symfony\Component\OptionsResolver\OptionsResolver; 

class StudentType extends AbstractType 
{ 
    /** 
    * {@inheritdoc} 
    */ 
    public function buildForm(FormBuilderInterface $builder, array $options) 
    { 
     $builder 
      ->add('name') 
      ->add('surname') 
      ->add('age') 
      /* 
      * It will be resolved to EntityType, which acts depending on your doctrine configuration 
      */ 
      ->add('classroom'); 
    } 

    /** 
    * {@inheritdoc} 
    */ 
    public function configureOptions(OptionsResolver $resolver) 
    { 
     $resolver->setDefaults(['data_class' => Student::class]); 
    } 
} 
संबंधित मुद्दे