首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >注册自定义表单视图助手

注册自定义表单视图助手
EN

Stack Overflow用户
提问于 2016-10-24 03:32:59
回答 2查看 441关注 0票数 0

使用ZF2,为自定义表单元素注册自定义视图帮助程序非常简单。

您可以简单地创建这样的元素:

代码语言:javascript
复制
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;
    }
}

创建一个匹配的助手:

代码语言:javascript
复制
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>';
    }
}

然后将其连接到config:

代码语言:javascript
复制
return [
    'form_elements' => [
        'factories' => [
            Recaptcha::class => RecaptchaFactory::class,
        ],
    ],

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

IIRC,你也得把它装在靴带里

代码语言:javascript
复制
public function onBootstrap($e)
{
    $application = $e->getApplication();
    $services = $application->getServiceManager();
    $services->get('ViewHelperManager')->get('FormElement')->addType('recaptcha', 'recaptcha');
}

将项目从ZF2升级到ZF3,自定义元素现在显示为textfield。

如果我在字段上直接调用助手,它将正确地呈现:

代码语言:javascript
复制
{{ recaptcha( user_form.get('recaptchafield') ) | raw }}

--自动关联似乎消失了。这样,在每个调用formRow时,都不会调用助手。

有人能快速解决吗?希望避免查看实际的zend-表单和zend-view代码。

谢谢!

EN

回答 2

Stack Overflow用户

发布于 2017-02-23 07:01:29

我也有同样的问题,我用

代码语言:javascript
复制
    $services->get('ViewHelperManager')->get('FormElement')->addType('recaptcha', 'recaptcha');

使用

代码语言:javascript
复制
    $services->get('ViewHelperManager')->get('FormElement')->addClass(Recaptcha::class, RecaptchaHelper::class);

配置也需要一些调整。它现在是这样写的:

代码语言:javascript
复制
return [
    'form_elements' => [
        'factories' => [
            Recaptcha::class => RecaptchaFactory::class,
        ],
    ],
    'view_helpers' => [
        'invokables' => [
            RecaptchaHelper::class => RecaptchaHelper::class,
        ],
    ],
];

希望能帮助别人更快地发现问题;)

票数 1
EN

Stack Overflow用户

发布于 2016-10-24 05:41:55

Invokable在ZF3中不再存在。您需要将recatpcha视图助手移动到工厂键,并将其连接到Zend\ServiceManager\Factory\InvokableFactory::class。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40210321

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档