2017-03-25 4 views
2

すべてのフィールドがあるのisActiveとworkout_choice、以外nullで新しいエントリを作成します1に設定され(それらがあるべきであるが、現在のユーザーのためにされるべきである - ない新しいユーザのために、等ID、ユーザ情報、と行を有します)。何らかの理由で、システムはログインしている現在のユーザーを拾っていませんが、var_dumping $ userを実行すると、現在のユーザーの情報が取得されます。が、私は、データベースにフォームデータを永続化しようとしていますが、それは現在のユーザーの行に移動しません、代わりに作成した新しいデータベースの行に

誰もが私が欠けているものの任意のアイデアを持っている場合、それははるかに高く評価されるだろう。ここに私のコントローラがあります:

/** 
* @Route ("user/LandingPage", name="user_LandingPage") 
* @param Request $request 
* @return \Symfony\Component\HttpFoundation\Response 
*/ 
public function landingPage(Request $request) 
{ 
    $em = $this->getDoctrine()->getManager(); 
    $form = $this->createForm('AppBundle\Form\LandingPageType'); 
    $form->handleRequest($request); 
    $x = $form->getData(); 
    $user = $this->getCurrentUser(); 

    if ($form->isValid()) { 
     $em->persist($user); 
     $em->persist($x); 
     $em->flush(); 
     return $this->chartAction(); 

return $this->render('user/LandingPage.html.twig', array(
     'form' => $form->createView(), 
     )); 

} 

ここに私のGETCURRENTUSER機能は私のDefaultControllerにあります:

public function getCurrentUser() 
    { 
     $userRepo = $this->getDoctrine() 
     ->getRepository('AppBundle:User'); 
     return $userRepo->findOneBy(array('id' => $this-> 
     getUser()>getId())); 

そして、ここに私にformTypeファイルがあります:

namespace AppBundle\Form; 

use Symfony\Component\Form\Extension\Core\Type\SubmitType; 
use Symfony\Component\Form\AbstractType; 
use Symfony\Component\Form\Extension\Core\Type\ChoiceType; 
use Symfony\Component\Form\FormBuilderInterface; 
use Symfony\Component\OptionsResolver\OptionsResolver; 

class LandingPageType extends AbstractType 
{ 
    /** 
    * {@inheritdoc} 
    */ 
    public function buildForm(FormBuilderInterface $builder, array 
    $options) 
     { 
     $builder 
      ->add('workoutChoice', ChoiceType::class, array(
       'label' => 'Choose Your Workout', 
       'choices' => array(
       'Pyramid Workout Day 1' => 0, 
       'Pyramid Workout Day 2' => 1), 
       'attr' => array('style' => 'width:200px;', 
       ))) 
      ->add('submit', SubmitType::class); 
    } 

    /** 
    * {@inheritdoc} 
    */ 
    public function configureOptions(OptionsResolver $resolver) 
    { 
     $resolver->setDefaults(array(

      'data_class' => 'AppBundle\Entity\User', 
      'csrf_protection' => false, 
     )); 
    } 

} 

そして、ここでは私の小枝です:

{% extends 'base.html.twig' %} 
{% block body %} 
<head> 

{% block stylesheets %}<link href="{{ asset('css/custom.css') }}" 
rel="stylesheet" media="screen">{% endblock %} 
</head> 
<body background="{{ asset('sport-1244925_1920.jpg') }}"> 

<h1>Welcome!</h1> 

<h3>Please choose which workout you wish to do today:</h3> 

{{ form_start(form, { 'style': 'horizontal', 'col_size': 'xs' }) }} 
    {{ form_row(form.workoutChoice) }} 
    {{ form_row(form.submit) }} 

</body> 
{% endblock %} 

私のエンティティファイル:

/** 
* @ORM\Column(type="smallint", length=6, name="workout_choice", 
     nullable=true) 
*/ 
private $workoutChoice; 

/** 
* 
* @return int 
*/ 
public function getWorkoutChoice() 
{ 
    return $this->workoutChoice; 
} 

/** 
* @param integer $workoutChoice 
*/ 
public function setWorkoutChoice($workoutChoice) 
{ 
    $this->workoutChoice = $workoutChoice; 
} 
+0

あなたは、あなたのGETCURRENTUSER()関数をしてください示してもらえますか? – jaro1989

+0

パブリック関数GETCURRENTUSER(){ $ userRepo =の$ this - > getDoctrine() - > getRepository( 'AppBundle:ユーザー'); リターン$ userRepo-> findOneBy(配列( 'ID' =>の$ this - >のgetUser() - >のgetId()))。 –

+0

あなたは実際に '$ em-> persist($ x);で新しいユーザエンティティを永続化しているので、あなたのデータベースに新しい行が追加されています' $ user-> setWorkoutChoice($ X-> getWorkoutChoice()) 'と' $ EM-を除去>($ X)を永続; ' – jaro1989

答えて

0

あなたのフォームに現在のユーザーを渡してみてください。以下のように:また

$user = $this->getCurrentUser(); 
$form = $this->createForm('AppBundle\Form\LandingPageType', $user); 

、あなたは簡単にSymfony3コントローラで、現在のユーザーを取得することができます:

$user = $this->getUser(); 
+0

こんにちはオリビエさん!それだった!ありがとうございました。 :) –

+0

あなたは大歓迎です。私はこれを数回自分でやりました、それは私が知っている方法です。ハハ。 – ASOlivieri

+0

LOL。乾杯! :) –

関連する問題

 関連する問題