我从服务检索实体库这样的:EntityManager的不持续
services:
AppBundle\Repository\SecurityAwareRepository:
abstract: true
calls:
- method: setTokenStorage
arguments:
- "@security.token_storage"
AppBundle\Repository\InvoiceRepository:
parent: AppBundle\Repository\SecurityAwareRepository
factory: ["@doctrine", getRepository]
arguments:
- "AppBundle:Invoice"
,然后我在控制器处理的形式:
public function creditCardSaveAction(Request $request)
{
$repo = $this->get('AppBundle\Repository\InvoiceRepository');
/** @var \AppBundle\Entity\InvoiceAddress $latestInvoice */
$latestInvoice = $repo->getLatestInvoice();
if ($latestInvoice){
$form = $this->createForm(CreditCardUpdate::class);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$invoiceAddress = $latestInvoice->getInvoiceAddress();
$invoiceAddress->setCreditcardToken($form->getData()['stripeToken']);
$invoiceAddress->setPaymentProvider($this->get('payment_provider_repository')->find(1));//hard coded to Stripe
$repo->persist($invoiceAddress);
$repo->flush($invoiceAddress);
return $this->redirectToRoute('site_index');
}else{
return $this->redirectToRoute('creditcard_update');
}
}
}
然而,这并不保存'stripeToken'字段,虽然我可以通过setCreditcardToken看到它到达实体
坚持和刷新功能实现如下:
class SecurityAwareRepository extends \Doctrine\ORM\EntityRepository
{
...
public function persist($entity)
{
$this->_em->persist($entity);
}
public function flush($entity)
{
$this->_em->flush($entity);
}
实现像在此之前,我只是试图
$em = $this->getDoctrine()->getManager();
$invoiceAddress->setCreditcardToken(...);
$em->persist($invoiceAddress);
$em->flush($invoiceAddress)
然而这也不能工作。
只有一个默认的EntityManager在此应用
表单创建:
控制器:
$form = $this->createForm(CreditCardUpdate::class);
return $this->render('@AppBundle/invoice_address/credit_card_update.html.twig', [
'form' => $form->createView()
]);
嫩枝:
<form action="{{ path('creditcard_save') }}" method="post" id="payment-form" class="text-center">
{{ form_widget(form.stripeToken) }}
{{ form_widget(form._token) }}
<div class="form-row credit_card_background text-center">
<div id="card-element">
</div>
<div id="card-errors" role="alert"></div>
</div>
<button class="btn btn-default ">Submit Payment</button>
</form>
class CreditCardUpdate extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder->add('stripeToken', HiddenType::class);
}
}
前,应验证码:'$形式 - > getData()['stripeToken']'而不是:'$ form-> getData('stripeToken')'? –
这一个也适用,但不保存$ form-> getData('credit_card_update')['stripeToken'](credit_card_update是我的表单前缀 – jdog
)你是如何创建表单的?特别是'stripToken'部分? –