私はFOSUserBundleを使用しています。symfony、mysql、fosuserbundle:関連マッピング - OneToOne
私はこのUSERとADDRESSエンティティを持ち、1対1で関連しています。 ユーザーが作成されていて、アドレスを追加したいとします。 EDIT PROFILEページでは、ユーザーが住所を追加できるフォームが必要です。
ここに質問があります。私が作成しているこの新しいアドレスが、現在ログインしているユーザー用であることをAddresエンティティに知らせるにはどうすればよいですか?
これは私の編集アクションです:
class User extends BaseUser
{
/**
* @ORM\Column(type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
protected $id;
/**
* @ORM\Column(type="string", length=255)
* @Assert\NotBlank()
* @Assert\Length(min=2)
*/
protected $firstName;
/**
* @ORM\Column(type="string", length=255)
* @Assert\NotBlank()
* @Assert\Length(min=2)
*/
protected $lastName;
/**
* @ORM\Column(name="is_active", type="boolean")
*/
protected $isActive;
/**
* @ORM\OneToOne(targetEntity="Phaddress", mappedBy="user")
*/
protected $phaddress;
、これがアドレスエンティティである(phaddres):
これにより、ユーザは、エンティティpublic function editAction(Request $request)
{
$user = $this->getUser();
if (!is_object($user) || !$user instanceof UserInterface) {
throw new AccessDeniedException('This user does not have access to this section.');
}
/** @var $dispatcher EventDispatcherInterface */
$dispatcher = $this->get('event_dispatcher');
$event = new GetResponseUserEvent($user, $request);
$dispatcher->dispatch(FOSUserEvents::PROFILE_EDIT_INITIALIZE, $event);
if (null !== $event->getResponse()) {
return $event->getResponse();
}
/** @var $formFactory FactoryInterface */
$formFactory = $this->get('fos_user.profile.form.factory');
$form = $formFactory->createForm();
$form->setData($user);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
/** @var $userManager UserManagerInterface */
$userManager = $this->get('fos_user.user_manager');
$event = new FormEvent($form, $request);
$dispatcher->dispatch(FOSUserEvents::PROFILE_EDIT_SUCCESS, $event);
$userManager->updateUser($user);
if (null === $response = $event->getResponse()) {
$url = $this->generateUrl('fos_user_profile_show');
$response = new RedirectResponse($url);
}
$dispatcher->dispatch(FOSUserEvents::PROFILE_EDIT_COMPLETED, new FilterUserResponseEvent($user, $request, $response));
return $response;
}
return $this->render('AppBundle:main:profile_edit.html.twig', array(
'form' => $form->createView(),
));
}
ですが(それはすべてのセッターとゲッターを持っています)
class Phaddress
{
/**
* @ORM\Column(type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
protected $id;
/**
* @ORM\Column(name="address_first")
*/
protected $addressfirst;
/**
* @ORM\Column(name="address_second")
*/
protected $address_second;
/**
* @ORM\Column(name="city")
*/
protected $city;
/**
* @ORM\Column(name="state")
*/
protected $state;
/**
* @Assert\Length(max = 5)
* @ORM\Column(name="zip", type="integer")
*/
protected $zip;
/**
* @Assert\Country();
* @ORM\Column(name="country")
*/
protected $country;
/**
* @Assert\Length(min = 8, max = 20, minMessage = "min_lenght", maxMessage = "max_lenght")
* @Assert\Regex(pattern="/^\(0\)[0-9]*$", message="number_only")
* @ORM\Column(name="phone_cel")
*/
protected $phone_cel;
/**
* @Assert\Length(min = 8, max = 20, minMessage = "min_lenght", maxMessage = "max_lenght")
* @Assert\Regex(pattern="/^\(0\)[0-9]*$", message="number_only")
* @ORM\Column(name="phone_nb")
*/
protected $phone_nb;
/**
* One Cart has One Customer.
* @ORM\OneToOne(targetEntity="User", inversedBy="phaddress")
* @ORM\JoinColumn(name="user_id", referencedColumnName="id")
*/
protected $user;
、これは.twigファイル内のフォームです:
{{ form_start(form, { 'action': path('fos_user_profile_edit'), 'attr': { 'class': 'form-group' } }) }}
{{ form_row(form.username, { 'attr': { 'class': 'form-control', 'style': 'margin-bottom: 0.7em' } }) }}
{{ form_row(form.firstName, { 'attr': { 'class': 'form-control', 'style': 'margin-bottom: 0.7em' } }) }}
{{ form_row(form.lastName, { 'attr': { 'class': 'form-control', 'style': 'margin-bottom: 0.7em' } }) }}
{{ form_row(form.email, { 'attr': { 'class': 'form-control', 'style': 'margin-bottom: 0.7em' } }) }}
{{ form_row(form.current_password, { 'attr': { 'class': 'form-control', 'style': 'margin-bottom: 0.7em' } }) }}
{{ form_row(form.phaddress.zip, { 'attr': { 'class': 'form-control', 'style': 'margin-bottom: 0.7em' } }) }}
<input type="submit" value="Update Profile" class="btn btn-success" />
{{ form_end(form) }}