2017-06-01 2 views
0

Ich habe den FOSUserbundle Registrierungs-Controller in Symfony überschrieben. Ich übergebe einen Parameter zur Registrierung an URL, und ich wollte diesen Parameter in meiner Benutzereinheit festlegen. Allerdings könnte ich den Parameter übergeben und auch den Parameter im Controller bekommen. Aber konnte diesen Wert nicht auf Entity setzen.Setzen Sie den URL-Parameter auf entity - Symfony

Controller:

public function registerAction(Request $request) 
{ 
    $user = $userManager->createUser(); 
    $user->setEnabled(true);  

    $event = new GetResponseUserEvent($user, $request); 
    $dispatcher->dispatch(FOSUserEvents::REGISTRATION_INITIALIZE, $event); 

    //Getting parameter 
    $surveyID = $request->query->get('survey'); 
    //Setting parameter- Not working 
    $user->setSurveyID($surveyID); 
    //echo $surveyID; 

    if (null !== $event->getResponse()) { 
     return $event->getResponse(); 
    } 


    $form = $formFactory->createForm(); 
    $form->setData($user); 


    $form->handleRequest($request); 

    if ($form->isSubmitted()) { 
     if ($form->isValid()) { 
      $event = new FormEvent($form, $request); 
      $dispatcher->dispatch(FOSUserEvents::REGISTRATION_SUCCESS, $event); 

      $userManager->updateUser($user); 

      if (null === $response = $event->getResponse()) { 
       $url = $this->generateUrl('fos_user_registration_confirmed'); 
       $response = new RedirectResponse($url); 
      } 

      $dispatcher->dispatch(FOSUserEvents::REGISTRATION_COMPLETED, new FilterUserResponseEvent($user, $request, $response)); 

      return $response; 
     } 

     $event = new FormEvent($form, $request); 
     $dispatcher->dispatch(FOSUserEvents::REGISTRATION_FAILURE, $event); 

     if (null !== $response = $event->getResponse()) { 
      return $response; 
     } 
    } 

    return $this->render('@FOSUser/Registration/register.html.twig', array(
     'form' => $form->createView(), 
    )); 
} 

$user->setSurveyID($surveyID) nicht funktioniert, aber es funktioniert mit $user->setSurveyID('324324')

Entity: User.php

/** 
* @ORM\Column(type="integer", nullable=true) 
*/ 
private $surveyID; 

    /** 
* @return mixed 
*/ 
public function getSurveyID() 
{ 
    return $this->surveyID; 
} 

/** 
* @param mixed $surveyID 
*/ 
public function setSurveyID($surveyID = null) 
{ 
    $this->surveyID = $surveyID; 
} 

Was soll ich tun, dass zu bekommen? Vielen Dank!

EDIT:

<form name="fos_user_registration_form" method="post" action="/register" class="fos_user_registration_register"> 

<div id="fos_user_registration_form"><div class="form-group"><label class="control-label required" for="fos_user_registration_form_firstname">First Name *</label><input type="text" id="fos_user_registration_form_firstname" name="fos_user_registration_form[firstname]" required="required" class="form-control" value="aasda"></div><div class="form-group"><label class="control-label required" for="fos_user_registration_form_lastname">Last Name *</label><input type="text" id="fos_user_registration_form_lastname" name="fos_user_registration_form[lastname]" required="required" class="form-control" value="asd"></div><div class="form-group"><label class="control-label required" for="fos_user_registration_form_username">Username *</label><input type="text" id="fos_user_registration_form_username" name="fos_user_registration_form[username]" required="required" class="form-control" value="asd"></div><div class="form-group"><label class="control-label required">Sex *</label><div id="fos_user_registration_form_sex"><div class="radio">                    <label class="required"><input type="radio" id="fos_user_registration_form_sex_0" name="fos_user_registration_form[sex]" required="required" value="M"> Male</label> 
</div><div class="radio">                    <label class="required"><input type="radio" id="fos_user_registration_form_sex_1" name="fos_user_registration_form[sex]" required="required" value="F" checked="checked"> Female</label> 
</div></div></div><div class="form-group has-error"><label class="control-label required" for="fos_user_registration_form_email">Email *</label><input type="email" id="fos_user_registration_form_email" name="fos_user_registration_form[email]" required="required" class="form-control" value="[email protected]"><span class="help-block"> <ul class="list-unstyled"><li><span class="glyphicon glyphicon-exclamation-sign"></span> fos_user.email.already_used</li></ul> 
</span></div><input type="hidden" id="fos_user_registration_form_plainPassword" name="fos_user_registration_form[plainPassword]" value="Kjk5XsachYkA"><input type="hidden" id="fos_user_registration_form_survey_id" name="fos_user_registration_form[survey_id]" value="12323"><div class="form-group"><label class="control-label" for="fos_user_registration_form_city">City</label><input type="text" id="fos_user_registration_form_city" name="fos_user_registration_form[city]" class="form-control"></div><div class="form-group"><label class="control-label" for="fos_user_registration_form_zip_code">Zip Code</label><input type="text" id="fos_user_registration_form_zip_code" name="fos_user_registration_form[zip_code]" class="form-control"></div><div class="form-group"><label class="control-label" for="fos_user_registration_form_age">Age</label><input type="number" id="fos_user_registration_form_age" name="fos_user_registration_form[age]" class="form-control"></div><div class="form-group"><div class="checkbox">               <label class="required"><input type="checkbox" id="fos_user_registration_form_privacy" name="fos_user_registration_form[privacy]" required="required" value="1" checked="checked"> Accept data privacy</label> 
</div></div><input type="hidden" id="fos_user_registration_form__token" name="fos_user_registration_form[_token]" value="IXsOFEj4S-9oYxUcGK53BrG0CSn-EyRbYkXuC74H1Ic"></div> 

+0

Wenn Sie form-data POSTen dann '$ surveyID = $ request -> query -> get ('survey'); 'ist nicht richtig, da es in $ _GET und nicht in $ _POST aussieht –

+0

@ V-Light ist richtig, verwenden Sie für Post-Daten $ request-> request-> bekommen ('Umfrage'); –

+0

@ V-Light ok, ich werde jetzt versuchen – Arcv

Antwort

1

Zunächst einmal überprüfen Sie Ihr $ Request-Objekt

dump($request->request->get($form->getName()), $request->getMethod()) 
return; 

und sehen, ob survey/tierten überhaupt gebucht wurden.

Wenn es keine ist survey dann sollen Sie Ihr Anmeldeformular ändern und survery Feld, um es ODER Scheck hinzufügen, wenn servey in dem Formularnamespace ist

, dies zu tun, versuchen, alle übermittelten Daten zu überprüfen

//dumps $_POST, $_GET and the Submit-Method 
dump($request->request->all(), $request->query->all(), $request->getMethod()) 
return; 

Sie sollten uns auch zeigen, wie Ihr Formular aussieht. Kopieren Sie einfach outterHtml (in Chrome: F12 drücken, dann Elements wählen, finden Element Rechtsklick -> Kopieren -> Kopieren Outerhtml)

UPDATE:

Ok, jetzt sehe ich :) Sie versuchen, erhalten servey mit

$surveyId = $request->request->get('survey'); 

aber verstecktes Feld einen anderen Namen name="fos_user_registration_form[survey_id]

so sollten Sie versuchen, t hat (Seine nach handle)

if($form->has('survey_id')) 
{ 
    $surveyID = $form->get('survey_id')->getNormData(); 
$user->setSurveyID($surveyID); 
} 

cource könnten Sie auch versuchen, survey_id direkt zu bekommen von $ _POST, aber es wäre auch schmutzig

$postedData = $request->request->get('fos_user_registration_form'); 
$surveyId = @$postedData['survey_id']; 
+0

Umfrage ist GETted und Formular ist POSTed. Und ich habe bereits eine versteckte Umfrage in meiner Form. – Arcv

+0

auch Outerhtml hinzugefügt, siehe bearbeiten! – Arcv

+0

@Arcv Ich aktualisierte meine Antwort –

Verwandte Themen