2016-10-24 4 views
0

ZF2를 사용하면 사용자 지정 양식 요소에 대한 사용자 지정보기 도우미를 등록하는 것이 매우 간단했습니다.사용자 지정 양식보기 도우미 등록

당신은 단순히 같은 요소를 만들 수

:

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>'; 
    } 
} 

그리고 설정에서 그것을 와이어 :

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; 
    } 
} 

가 일치하는 도우미 만들기

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

인보 크ables는 ZF3에 더 이상 존재하지 않습니다. 당신은 내가 같은 문제가 있었다 젠드 \ 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, 
     ], 
    ], 
]; 

희망)

관련 문제