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、あなたをブートストラップでもそれを配線する必要があります
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コードを見直すことはできません。
ありがとうございました!
私はそれを試してみました!残念ながら、それはレンダリングの成功につながりませんでした。実際に私がここに投稿する原因となったのです。 FormRowに飛び込んで、何が起こっているのか見てみましょう。 – Saeven