public function edit(Application $app, Request $request, $id = null)
{
$Customer = $app['user'];
// 配送先住所最大値判定
// $idが存在する際は、追加処理ではなく、編集の処理ため本ロジックスキップ
if (is_null($id)) {
$addressCurrNum = count($Customer->getCustomerAddresses());
$addressMax = $app['config']['deliv_addr_max'];
if ($addressCurrNum >= $addressMax) {
throw new NotFoundHttpException('お届け先の登録数の上限を超えています');
}
}
$CustomerAddress = $app['eccube.repository.customer_address']->findOrCreateByCustomerAndId($Customer, $id);
$parentPage = $request->get('parent_page', null);
// 正しい遷移かをチェック
$allowdParents = array($app->url('mypage_delivery'), $app->url('shopping_delivery'));
// 遷移が正しくない場合、デフォルトであるマイページの配送先追加の画面を設定する
if (!in_array($parentPage, $allowdParents)) {
// @deprecated 使用されていないコード
$parentPage = $app->url('mypage_delivery');
}
$builder = $app['form.factory']->createBuilder('customer_address', $CustomerAddress);
$event = new EventArgs(array('builder' => $builder, 'Customer' => $Customer, 'CustomerAddress' => $CustomerAddress), $request);
$app['eccube.event.dispatcher']->dispatch(EccubeEvents::FRONT_MYPAGE_DELIVERY_EDIT_INITIALIZE, $event);
$form = $builder->getForm();
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
log_info('お届け先登録開始', array($id));
$app['orm.em']->persist($CustomerAddress);
$app['orm.em']->flush();
log_info('お届け先登録完了', array($id));
$event = new EventArgs(array('form' => $form, 'Customer' => $Customer, 'CustomerAddress' => $CustomerAddress), $request);
$app['eccube.event.dispatcher']->dispatch(EccubeEvents::FRONT_MYPAGE_DELIVERY_EDIT_COMPLETE, $event);
$app->addSuccess('mypage.delivery.add.complete');
return $app->redirect($app->url('mypage_delivery'));
}
$BaseInfo = $app['eccube.repository.base_info']->get();
return $app->render('Mypage/delivery_edit.twig', array('form' => $form->createView(), 'parentPage' => $parentPage, 'BaseInfo' => $BaseInfo));
}