के बीच कई से अधिक संबंधों के बाद, मेरे सिम्फनी 2.7 एप्लिकेशन में, मेरे पास FOSUserBundle पर आधारित उपयोगकर्ता इकाई है। किसी ऐडएक्शन() फॉर्म तक पहुंचने के लिए उपयोगकर्ता को कनेक्ट होना होगा।कनेक्ट किए गए उपयोगकर्ता के बाद एक सिम्फनी फॉर्म फ़ील्ड (उपयोगकर्ता फ़ील्ड) में डिफ़ॉल्ट मान सेट करने के लिए,
मेरे उपयोगकर्ता इकाई किसी अन्य संस्था नामित parc साथ जुड़ा हुआ है। यह मेरी दो इकाइयों का कोड है।
Users.php
class Users extends BaseUser
{
/**
* @ORM\Id
* @ORM\Column(type="integer")
* @ORM\GeneratedValue(strategy="AUTO")
*/
protected $id;
public function __construct()
{
parent::__construct();
$this->parcs = new \Doctrine\Common\Collections\ArrayCollection();
}
/**
* @var \Doctrine\Common\Collections\Collection
*
* @ORM\ManyToMany(targetEntity="Parcs", inversedBy="users")
* @ORM\JoinTable(name="users_parcs",
* joinColumns={
* @ORM\JoinColumn(name="user_id", referencedColumnName="id")
* },
* inverseJoinColumns={
* @ORM\JoinColumn(name="parc_id", referencedColumnName="id")
* }
*)
*/
private $parcs;
/**
* Get parcs
*
* @return \Doctrine\Common\Collections\Collection
*/
public function getParcs()
{
return $this->parcs;
}
/**
* Set parcs
*
* @return \Doctrine\Common\Collections\Collection
*/
public function setParcs($parcs)
{
return $this->parcs;
}
Parcs.php
class Parcs
{
/**
* @var integer
*
* @ORM\Column(name="id", type="integer", nullable=false)
* @ORM\Id
* @ORM\GeneratedValue(strategy="IDENTITY")
*/
private $id;
/**
* @var \Doctrine\Common\Collections\Collection
*
* @ORM\ManyToMany(targetEntity="Users", mappedBy="parcs")
*/
private $users;
public function __construct()
{
$this->users = new \Doctrine\Common\Collections\ArrayCollection();
}
//rest of my entity attributes, object, properties etc
// getters and setters
/**
* Get users
*
* @return \Doctrine\Common\Collections\Collection
*/
public function getUsers()
{
return $this->users;
}
/**
* Set users
*
* @return \Doctrine\Common\Collections\Collection
*/
public function setUsers($users)
{
return $this->users;
}
/**
* Add user
*
* @param \MySpace\MyBundle\Entity\Users $user
*
* @return Parcs
*/
public function addUser(\MySpace\MyBundle\Entity\Users $user)
{
$this->users[] = $user;
return $this;
}
FOSUserBundle का उपयोग करना, मेरी टहनी ध्यान में रखते हुए, जुड़ा उपयोगकर्ता के लिए तक पहुँचने के लिए मैं इस बनाने: {{ app.user.username }}
, जो मुझे वर्तमान उपयोगकर्ता का उपयोगकर्ता नाम दोहराता है।
अब, मैं (क्षेत्र उपयोगकर्ता के लिए) मेरे सिम्फोनी रूप में यह मान प्राप्त करने के लिए जब मैं एक parc जोड़ना चाहते हैं करना चाहते हैं। यह मेरा parcsType.php
प्रपत्र:
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('parcName')
->add('users')
;
}
इस टहनी ध्यान में रखते हुए मेरी रूप है:
<form action="{{ path('addParcs_process') }}" method="POST" {{ form_enctype(form) }}>
<div>
{{ form_label(form.parcName, "Enter the parc name: ", {'label_attr': {'class': 'control-label'}}) }}
{{ form_errors(form.parcName) }}
{{ form_widget(form.parcName) }}
</div>
<div>
{{ form_label(form.users, "Vous ajoutez ce parc en tant que: ", {'label_attr': {'class': 'control-label'}}) }}
{{ form_errors(form.users) }}
{{ form_widget(form.users, {'attr': {'value': app.user.username }}) }}
</div>
<input type="submit" value="Ajouter" class="btn btn-success"/>
</form>
आप देख सकते हैं, मैं {{ app.user.username }}
साथ मेरे उपयोगकर्ता क्षेत्र का डिफ़ॉल्ट मान सेट है, और यह काम करता है, मेरा उपयोगकर्ता फ़ील्ड मुझे वर्तमान उपयोगकर्ता देता है। लेकिन जब मैं Parcs.php
और Users.php
के बीच फार्म, उपयोगकर्ता क्षेत्र और संघ (ManyToMany) जमा कायम/प्लावित नहीं कर रहे हैं।
यह मेरा नियंत्रक कोड है:
public function addParcsAction() {
if (!$this->get('security.context')->isGranted('ROLE_EDIT')) {
throw new HttpException("403");
}
$em=$this->getDoctrine()->getManager();
$parc = new Parcs;
$form=$this->createForm(new ParcsType(), $parc);
$form->add('user');
$request = $this->getRequest();
if ($request->isMethod('POST') | ($form->isValid())) {
$form->bind($request);
$currentUser=$this->container->get('security.context')->getToken()->getUser();
$parc->setUsers($currentUser);
$parc = $form->getData();
$em->persist($parc);
$em->flush();
return $this->redirect($this->generateUrl('indexParc'));
}
else {
return $this->render('MySpaceMyBundle:Parcs:addParcs.html.twig', array('form' => $form->createView()));
}
}
प्रस्तुत करने, अच्छी तरह से काम करता है जब मैं parc नाम डेटा मेरी डेटाबेस में पंजीकृत किया गया है के लिए मान दर्ज है, लेकिन नहीं उन मूल्य और ManyToMany संघ।
क्योंकि यदि आप उपयोगकर्ता से संबंध बनाते हैं, तो आपको उपयोगकर्ता ऑब्जेक्ट को केवल उपयोगकर्ता नाम नहीं देना होगा। मेट्रो ** {{app.user.username}} ** का उपयोग करने में – malcolm
@malcolm **, मैं उपयोगकर्ता ऑब्जेक्ट का उपयोग कैसे कर सकता हूं? –
आपके अनुरोध को बाध्य करने के बाद आप वर्तमान उपयोगकर्ता को नियंत्रक में प्राप्त कर सकते हैं और इसे '$ parc-> setUsers ($ उपयोगकर्ता) सेट कर सकते हैं;' इसके लिए आपको फॉर्म फ़ील्ड की आवश्यकता नहीं है। – malcolm