JMS自定义支付插件 - Symfony2

时间:2013-10-04 12:10:34

标签: php symfony jms

我正在尝试使用Symfony2的JMS支付包创建自定义付款方式。 我把paypal软件包设置得很好 - 但我希望通过银行转帐支付第二个选项。

以下是我的代码 - 但这并未显示新的付款方式。

表格类:

namespace JMS\Payment\BanktransferBundle\Form;

use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;

class BanktransferType extends AbstractType {

public function buildForm(FormBuilderInterface $builder, array $options) {

    $builder
            ->add('holder', 'text', array('required' => false))
            ->add('number', 'text', array('required' => false))
            ->add('expires', 'date', array('required' => false))
            ->add('code', 'text', array('required' => false))
    ;
}

public function getName() {
    return 'credit_card';
}

}

插件类:

namespace JMS\Payment\BanktransferBundle\Form;

use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;

class BanktransferType extends AbstractType {

public function buildForm(FormBuilderInterface $builder, array $options) {

    $builder
            ->add('holder', 'text', array('required' => false))
            ->add('number', 'text', array('required' => false))
            ->add('expires', 'date', array('required' => false))
            ->add('code', 'text', array('required' => false))
    ;
}

public function getName() {
    return 'credit_card';
}

}

Services.yml

services:
payment.plugin.banktransfer:
    class: JMS\Payment\BanktransferBundle\Plugin\BanktransferPlugin
    tags: [{name: payment.plugin}]

credit_card_type:
    class: JMS\Payment\BanktransferBundle\Form\BanktransferType
    tags:
        - { name: form.type, alias: credit_card }
        - { name: payment.method_type }

为了让JMS支付包找到我的插件,我需要做些什么?

2 个答案:

答案 0 :(得分:0)

确定。我似乎通过使用XML而不是YML来显示它。

的services.xml

<?xml version="1.0" ?>
<container xmlns="http://symfony.com/schema/dic/services"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://symfony.com/schema/dic/services http://symfony.com/schema  /dic/services/services-1.0.xsd">

<parameters>
    <parameter key="payment.plugin.cash_checkout.class">JMS\Payment\CashBundle\Plugin\CashPlugin</parameter>
    <parameter key="payment.form.cash_checkout_type.class">JMS\Payment\CashBundle\Form\CashType</parameter>
</parameters>

<services>
    <service id="payment.form.cash_checkout_type" class="%payment.form.cash_checkout_type.class%">
        <tag name="payment.method_form_type" />
        <tag name="form.type" alias="cash_checkout" />
    </service>
</services>
</container>

答案 1 :(得分:0)

你能告诉我们真正的插件类吗?我认为你发布了错误的内容。 我遇到了同样的问题,我遵循了基于JMS documentation的说明。

我的插件类(最小):

    <?php
    //...

    use \JMS\Payment\CoreBundle\Plugin\AbstractPlugin;

    class DebitPlugin extends AbstractPlugin {
        public function processes($name) {
        return 'debit' === $name;
      }
    }

在您的控制器中,您必须添加名称,具体取决于您的插件(在我的情况下为“借记”)。

   <?php
   //...
   $form = $this->getFormFactory()->create('debit', null, array());
   //...

希望有所帮助!