2016-10-24 13 views
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、あなたをブートストラップでもそれを配線する必要があります

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コードを見直すことはできません。

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

答えて

0

InvokablesはZF3に存在しなくなりました。私は同じ問題を持っていたのZend \ ServiceManager \工場\ InvokableFactory ::クラス

+0

私はそれを試してみました!残念ながら、それはレンダリングの成功につながりませんでした。実際に私がここに投稿する原因となったのです。 FormRowに飛び込んで、何が起こっているのか見てみましょう。 – Saeven

0

に工場の代わりにキーとワイヤーそれをするあなたのrecatpchaビューヘルパーを移動する必要があると私は

$services->get('ViewHelperManager')->get('FormElement')->addType('recaptcha', 'recaptcha'); 

を交換することによってそれを解決しました

$services->get('ViewHelperManager')->get('FormElement')->addClass(Recaptcha::class, RecaptchaHelper::class); 

設定にもいくつかの適合が必要でした。それは次のように読み取ります。他の誰かが問題を速く見つけることができます

return [ 
    'form_elements' => [ 
     'factories' => [ 
      Recaptcha::class => RecaptchaFactory::class, 
     ], 
    ], 
    'view_helpers' => [ 
     'invokables' => [ 
      RecaptchaHelper::class => RecaptchaHelper::class, 
     ], 
    ], 
]; 

ホープ;)