0

ZF2 では、カスタム フォーム要素のカスタム ビュー ヘルパーを登録するのは非常に簡単でした。

次のような要素を簡単に作成できます。

use Zend\Form\Element;

class Recaptcha extends Element
{
    protected $attributes = [
        'type' => 'recaptcha',
    ];

    protected $secret;

    public function getSecret()
    {
        return $this->secret;
    }

    public function __construct($secret)
    {
        parent::__construct();
        $this->secret = $secret;
    }
}

一致するヘルパーを作成します。

use Zend\Form\ElementInterface;
use Zend\Form\View\Helper\FormElement;

class Recaptcha extends FormElement
{
    public function render(ElementInterface $element)
    {
        return '<div class="form-group">
            <div id="register_recaptcha">
                <div class="g-recaptcha" data-sitekey="' . $element->getSecret() . '"></div>
            </div>
        </div>
        <script src="//www.google.com/recaptcha/api.js"></script>';
    }
}

そして、構成でそれを配線します:

return [
    'form_elements' => [
        'factories' => [
            Recaptcha::class => RecaptchaFactory::class,
        ],
    ],

    'view_helpers' => [
        'invokables' => [
            'recaptcha' => RecaptchaHelper::class,
        ],
    ],
];

IIRC、Bootstrapにも配線する必要があります

public function onBootstrap($e)
{
    $application = $e->getApplication();
    $services = $application->getServiceManager();
    $services->get('ViewHelperManager')->get('FormElement')->addType('recaptcha', 'recaptcha');
}

プロジェクトを ZF2 から ZF3 にアップグレードすると、カスタム要素がテキスト フィールドとして表示されるようになりました。

フィールドでヘルパーを直接呼び出すと、適切にレンダリングされます。

{{ recaptcha( user_form.get('recaptchafield') ) | raw }}

一見消えたのは自動関連付けです。 それぞれで formRow を呼び出してもヘルパーは呼び出されません。

誰でも簡単に修正できますか?実際の zend-form と zend-view のコードをレビューする手間を省けることを願っています。

ありがとうございました!

4

2 に答える 2

0

Invokables は ZF3 には存在しません。代わりに、recatpcha ビュー ヘルパーを factory キーに移動し、Zend\ServiceManager\Factory\InvokableFactory::class に接続する必要があります。

于 2016-10-24T05:41:55.230 に答える