I have problems with setting up default variable using form builder and FOS UserBundle in Symfony2.8
/**
* @Route("/add/{id}", name="add")
* @Template("add.html.twig")
*/
public function createFormAction ($id, Request $request)
{
$user = $this->container->get('security.context')->getToken()->getUser();
$username = $user->getUsername();
$userid = $user->getId();
$repo = $this->getDoctrine()->getRepository('AppBundle:Place');
$pl = $repo->find($id);
//var_dump($us);
$form = $this -> createFormBuilder ($pl)
-> add( "id" , "integer" )
-> add( "placeuser", NULL)
-> add( "priceperhour", "hidden", array( "mapped" => false))
-> add( "rentdate" , "date" )
-> add( "rentlength" , "integer" )
->add( 'save', 'submit', array('label' => 'Add'))
-> getForm ();
$form->handleRequest($request);
if ($form->isSubmitted())
{
$pl = $form->getData();
$em = $this->getDoctrine()->getManager();
$em->flush();
return $this->redirectToRoute('reservation');
}
Return $this -> render ( 'add.html.twig' , [ 'form' => $form -> createView ()]);
}
Please take look at -> add( "placeuser", NULL) in result I received drop-down menu with all usernames from table.
I tried to change to -> add( "placeuser", "integer or text", array( "data" => $username, or $userid from security.context)) but I have got error "Unable to transform value for property path "placeuser": Expected a numeric/string." Form is working only when user from drop-down menu is selected.
Entity Place:
namespace AppBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
use Doctrine\Common\Collections\ArrayCollection;
use Symfony\Component\Validator\Constraints as Assert;
/**
* Places
*
* @ORM\Entity
* @ORM\Table(name="places")
*/
class Place
{
/**
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="NONE")
*
*/
private $id;
/**
* @ORM\Column(name="priceperhour", type="decimal", precision=4, scale=2, nullable=true)
*/
private $priceperhour;
/**
* @ORM\Column(name="rentdate", type="date", nullable=true)
*/
private $rentdate;
/**
* @ORM\Column(name="rentlength", type="decimal", nullable=true)
*/
private $rentlength;
/**
* @ORM\ManyToOne(targetEntity="User", inversedBy="places")
* @ORM\JoinColumn(name="placeuser", referencedColumnName="id")
*/
private $placeuser;
/**
* Set id
*
* @param integer $id
*
* @return Place
*/
public function setId($id)
{
$this->id = $id;
return $this;
}
/**
* Get id
*
* @return integer
*/
public function getId()
{
return $this->id;
}
/**
* Set priceperhour
*
* @param string $priceperhour
*
* @return Place
*/
public function setPriceperhour($priceperhour)
{
$this->priceperhour = $priceperhour;
return $this;
}
/**
* Get priceperhour
*
* @return string
*/
public function getPriceperhour()
{
return $this->priceperhour;
}
/**
* Set rentdate
*
* @param string $rentdate
*
* @return Place
*/
public function setRentdate($rentdate)
{
$this->rentdate = $rentdate;
return $this;
}
/**
* Get rentdate
*
* @return string
*/
public function getRentdate()
{
return $this->rentdate;
}
/**
* Set rentlength
*
* @param integer $rentlength
*
* @return Place
*/
public function setRentlength($rentlength)
{
$this->rentlength = $rentlength;
return $this;
}
/**
* Get rentlength
*
* @return integer
*/
public function getRentlength()
{
return $this->rentlength;
}
/**
* Set placeuser
*
* @param \AppBundle\Entity\User $placeuser
*
* @return Place
*/
public function setPlaceuser(\AppBundle\Entity\User $placeuser = null)
{
$this->placeuser = $placeuser;
return $this;
}
/**
* Get placeuser
*
* @return \AppBundle\Entity\User
*/
public function getPlaceuser()
{
return $this->placeuser;
}
}
Entity User:
namespace AppBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
use Doctrine\Common\Collections\ArrayCollection;
use Symfony\Component\Validator\Constraints as Assert;
use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity;
use FOS\UserBundle\Model\User as BaseUser;
/**
* User
*
* @ORM\Entity
* @ORM\Table(name="users")
* @UniqueEntity(fields="email", message="Email already taken")
* @UniqueEntity(fields="username", message="Username already taken")
*/
class User extends BaseUser
{
/**
* @ORM\Id
* @ORM\Column(name="id", type="integer")
* @ORM\GeneratedValue(strategy="AUTO")
*/
protected $id;
/**
* @Assert\Length(min=5)
*/
protected $username;
/**
* @Assert\Length(min=5)
* @Assert\Length(max=4096)
*/
protected $password;
/**
* @ORM\Column(name="name", type="string", length=20, nullable=true)
*/
private $name;
/**
* @ORM\Column(name="surname", type="string", length=20, nullable=true)
*/
private $surname;
/**
* @Assert\NotBlank()
*/
protected $email;
/**
* @ORM\Column(name="accountvalue", type="decimal", precision=6, scale=2, nullable=true)
*/
private $accountvalue;
/**
* @ORM\OneToMany (targetEntity="Place", mappedBy="placeuser")
*/
private $places;
public function __construct()
{
parent::__construct();
$this->places = new ArrayCollection();
}
/**
* Get id
*
* @return integer
*/
public function getId()
{
return $this->id;
}
/**
* Set name
*
* @param string $name
*
* @return User
*/
public function setName($name)
{
$this->name = $name;
return $this;
}
/**
* Get name
*
* @return string
*/
public function getName()
{
return $this->name;
}
/**
* Set surname
*
* @param string $surname
*
* @return User
*/
public function setSurname($surname)
{
$this->surname = $surname;
return $this;
}
/**
* Get surname
*
* @return string
*/
public function getSurname()
{
return $this->surname;
}
/**
* Set accountvalue
*
* @param string $accountvalue
*
* @return User
*/
public function setAccountvalue($accountvalue)
{
$this->accountvalue = $accountvalue;
return $this;
}
/**
* Get accountvalue
*
* @return string
*/
public function getAccountvalue()
{
return $this->accountvalue;
}
/**
* Add place
*
* @param \AppBundle\Entity\Place $place
*
* @return User
*/
public function addPlace(\AppBundle\Entity\Place $place)
{
$this->places[] = $place;
return $this;
}
/**
* Remove place
*
* @param \AppBundle\Entity\Place $place
*/
public function removePlace(\AppBundle\Entity\Place $place)
{
$this->places->removeElement($place);
}
/**
* Get places
*
* @return \Doctrine\Common\Collections\Collection
*/
public function getPlaces()
{
return $this->places;
}
}
My goal is to have field with currently logged user, and add place in this context.
Thanks a million for any help!