Frage Legen Sie den Standardwert für den Entitätstyp in Symfony2 fest


Ich konnte nicht herausfinden, wie man einen Standardwert für einen Entitätstyp in Symfony2 vornimmt. Mein Code sah so aus:

$rewardChoice = $this->createFormBuilder($reward)
    ->add('reward_name', 'entity', array(
        'class' => 'FuelFormBundle:Reward',
        'property' => 'reward_name',
        'data' => 2,
        'query_builder' => function(EntityRepository $er){
            return $er->createQueryBuilder('r')
                ->where('r.active = 1')
                ->groupBy('r.reward_id')
                ->orderBy('r.reward_name', 'DESC');

        },
    ))
    ->getForm();

Sie müssen jedoch das Objekt, mit dem Sie arbeiten, abgeben, damit es funktioniert. Meine Antwort ist unten.

Ich habe viele verschiedene Antworten gefunden, aber alle haben die Art und Weise, wie das Formular erstellt wurde, neu strukturiert. Das war viel einfacher.


5
2017-10-24 22:34


Ursprung


Antworten:


Ich fand also viele Antworten, um diese Arbeit zu machen, aber alle schienen die Form neu zu strukturieren, um sie auf eine andere Weise zu bauen, aber ich fand, dass das Objekt am besten funktioniert, also dachte ich, dass ich meine Lösung posten würde nochmal.

Hier ist mein Code in der Steuerung.

// this is setting up a controller and really isn't important 
$dbController = $this->get('database_controller');

// this is getting the user id based on the hash passed by the url from the
// database controller
$user_id = $dbController->getUserIdByHash($hash);

// this is getting the Reward Entity.  A lot of times you will see it written as 
// $reward = new Reward however I am setting info into reward right away in this case
$reward = $dbController->getRewardByUserId($user_id);


$rewardChoice = $this->createFormBuilder($reward)
    ->add('reward_name', 'entity', array(
        'class' => 'FuelFormBundle:Reward',
        'property' => 'reward_name',

        // I pass $reward to data to set the default data.  Whatever you
        // assign to $reward will set the default value.  
        'data' => $reward,  
        'query_builder' => function(EntityRepository $er){
                return $er->createQueryBuilder('r')
                    ->where('r.active = 1')
                    ->groupBy('r.reward_id')
                    ->orderBy('r.reward_name', 'DESC');
        },
    ))
    ->getForm();

Ich hoffe, das macht die Dinge klarer. Ich sah eine Menge der gleichen Frage, aber keine mit dieser Lösung.


8
2017-10-24 22:34



Der beste Weg, dies zu tun ist, den Namen der Belohnung vor dem Erstellen des Formulars festzulegen. Beispielsweise:

$reward->setRewardName('your_relationship_reference_here');

$rewardChoice = $this->createFormBuilder($reward)

Verwendung der data Feld kann Probleme verursachen.


0
2018-03-26 12:07



Initialisieren Sie den Wert aus dem Zielobjekt des Formulars

$article=2/*Id of item that you wont to set as default*/    
$stock->setArtigo($this
                ->getDoctrine()
                ->getManager()
                ->getRepository('AppBundle:Artigo')
                ->find($article));

            $form = $this->createForm('AppBundle\Form\StockType', $stock);

0
2017-08-09 19:49



Für symfony 4 können wir 'Platzhalter' => 'Wählen Sie eine Option' verwenden,

->add('reward_name', EntityType::class, array(
                    'class' => Reward::class,
                    'choice_label' => 'name',
                    'placeholder' => 'Choose an option',
                ))

0
2017-08-24 05:50