2015-11-02 2 views
0

Я пытаюсь изучить symfony2, но теперь я бегу против стены, используя форму с сущностью. Эниты будут отображаться в форме (в списке), но когда я пытаюсь проверить, какой элемент выделяет объект (здесь $ location), он пуст (null). Я попробовал образец задачи из руководства без каких-либо проблем, но здесь я потерял :(. А код выглядит почти идентично ????Форма Symfony2 с сущностью всегда будет устанавливать объект в нуль

Где моя ошибка? Большое спасибо. Привет Martin

Моя сущность

<?php 

namespace AppBundle\Entity; 

use Doctrine\ORM\Mapping as ORM; 
use Doctrine\Common\Collections\ArrayCollection; 
use AppBundle\Entity; 


/** 
* Location 
* 
* @ORM\Table() 
* @ORM\Entity 
*/ 
class Location 
{ 

    /** 
    * @ORM\OneToMany(targetEntity="Employee", mappedBy="location") 
    */ 

    protected $employees; 
    /** 
    * @var integer 
    * 
    * @ORM\Column(name="id", type="integer") 
    * @ORM\Id 
    * @ORM\GeneratedValue(strategy="AUTO") 
    */ 
    private $id; 

    /** 
    * @var string 
    * 
    * @ORM\Column(name="street", type="string", length=255) 
    */ 
    private $street; 

    /** 
    * @var string 
    * 
    * @ORM\Column(name="no", type="string", length=255) 
    */ 
    private $no; 

    /** 
    * @var string 
    *`enter code here` 
    * @ORM\Column(name="city", type="string", length=255) 
    */ 
    private $city; 

    /** 
    * @var string 
    * 
    * @ORM\Column(name="zip", type="string", length=255) 
    */ 
    private $zip; 

    /** 
    * @var string 
    * 
    * @ORM\Column(name="name", type="string", length=255) 
    */ 
    private $name; 


    public function __construct() { 
     $this->employees=new ArrayCollection(); 
    } 

    /** 
    * Get id 
    * 
    * @return integer 
    */ 
    public function getId() 
    { 
     return $this->id; 
    } 

    /** 
    * Set street 
    * 
    * @param string $street 
    * 
    * @return Location 
    */ 
    public function setStreet($street) 
    { 
     $this->street = $street; 

     return $this; 
    } 

    /** 
    * Get street 
    * 
    * @return string 
    */ 
    public function getStreet() 
    { 
     return $this->street; 
    } 

    /** 
    * Set no 
    * 
    * @param string $no 
    * 
    * @return Location 
    */ 
    public function setNo($no) 
    { 
     $this->no = $no; 

     return $this; 
    } 

    /** 
    * Get no 
    * 
    * @return string 
    */ 
    public function getNo() 
    { 
     return $this->no; 
    } 

    /** 
    * Set city 
    * 
    * @param string $city 
    * 
    * @return Location 
    */ 
    public function setCity($city) 
    { 
     $this->city = $city; 

     return $this; 
    } 

    /** 
    * Get city 
    * 
    * @return string 
    */ 
    public function getCity() 
    { 
     return $this->city; 
    } 

    /** 
    * Set zip 
    * 
    * @param string $zip 
    * 
    * @return Location 
    */ 
    public function setZip($zip) 
    { 
     $this->zip = $zip; 

     return $this; 
    } 

    /** 
    * Get zip 
    * 
    * @return string 
    */ 
    public function getZip() 
    { 
     return $this->zip; 
    } 

    /** 
    * Set name 
    * 
    * @param string $name 
    * 
    * @return Location 
    */ 
    public function setName($name) 
    { 
     $this->name = $name; 

     return $this; 
    } 

    /** 
    * Get name 
    * 
    * @return string 
    */ 
    public function getName() 
    { 
     return $this->name; 
    } 

    /** 
    * Add employee 
    * 
    * @param \AppBundle\Entity\Employee $employee 
    * 
    * @return Location 
    */ 
    public function addEmployee(\AppBundle\Entity\Employee $employee) 
    { 
     $this->employees[] = $employee; 

     return $this; 
    } 

    /** 
    * Remove employee 
    * 
    * @param \AppBundle\Entity\Employee $employee 
    */ 
    public function removeEmployee(\AppBundle\Entity\Employee $employee) 
    { 
     $this->employees->removeElement($employee); 
    } 

    /** 
    * Get employees 
    * 
    * @return \Doctrine\Common\Collections\Collection 
    */ 
    public function getEmployees() 
    { 
     return $this->employees; 
    } 
} 

Мои Formclass

<?php 
/** 
* Description of LocationSelectType 
* 
* @author mwesterm 
*/ 

namespace AppBundle\Form\Type; 

use Symfony\Component\Form\AbstractType; 
use Symfony\Component\Form\FormBuilderInterface; 
use AppBundle\Entity\Location; 
use Symfony\Component\OptionsResolver\OptionsResolver; 
use Symfony\Component\OptionsResolver\OptionsResolverInterface; 
use Symfony\Component\Form\Extension\Core\ChoiceList\ObjectChoiceList; 

class LocationSelectType extends AbstractType { 

    public function buildForm(FormBuilderInterface $builder, array $options) { 


     $builder->add('name', 'entity', array(
        'choice_label' => 'Name', 
        'class' => 'AppBundle\Entity\Location', 
        'required' => 'false', 
        'expanded' => 'true' 
       )) 
       ->add('new', 'submit', array('label' => 'Neu')) 
       ->add('edit', 'submit', array('label' => 'Ändern')) 
       ->add('delete', 'submit', array('label' => 'Löschen')); 
    } 

    public function getName() { 
     return 'app_locationSelect'; 
    } 

    public function configureOptions(OptionsResolver $resolver) { 
     /* define your defaults here */ 
     $resolver->setDefaults(array(
      'data_class' => 'AppBundle\Entity\Location' 
     )); 
    } 
} 

мой контроллер:

<?php 


namespace AppBundle\Controller\MasterData; 

use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route; 
use Symfony\Bundle\FrameworkBundle\Controller\Controller; 
use AppBundle\Entity\Location; 
use AppBundle\Form\Type\LocationSelectType; 
use Symfony\Component\HttpFoundation\Response; 
use Symfony\Component\HttpFoundation\Request; 

class EditLocationData extends Controller { 

    /** 
    * @Route("editLocations", name="edit_locations") 
    */ 
    public function EditLocationAction(Request $request) { 

     $location = new Location(); 
     $form = $this->createForm(new LocationSelectType(), $location); 
     $form->handleRequest($request); 
     if ($form->isValid()) { 
      if ($form->get('edit')->isClicked()) { 
       return new Response('<html><body>Edit ID:' . $location->getId() . ' Name;' . $location->getCity()); 
      } 
     } 
     return $this->render("masterData/locationEditSelect.html.twig", array(
        'form' => $form->createView() 
     )); 
    } 
} 

ответ

0

Что происходит, что каждый тип вызове функции EditLocationAction переменных $ местоположение будет повторно инстанцировано.

Я думаю, что вы считаете, что после того, как вы нажмете «отправить», переменная $ location будет создана с использованием любого объекта, который вы выбрали.

Переменная $ request передает любую информацию, выбранную из представления, и обрабатывает ее через handleRequest для заполнения новой переменной $ form.

(Подробнее handleRequest) http://api.symfony.com/2.4/Symfony/Component/Form/Form.html#method_handleRequest

Для быстрой фиксации (не знаю, лучшие практики), может быть, я бы быстро дамп по запросу переменной $ и выяснить, где в этом массиве является то, что вам ищем.

+0

Спасибо, но я обнаружил, что проблема (или решение) отличается. объект хранится в $ location-> name. Таким образом, чтобы получить реальный объект, который выбран пользователем, правильным вызовом является $ location-> getName(). Я не знаю, почему в документации написано что-то другое. –

Смежные вопросы