繁体   English   中英

在Zend Expressive 2中编写自定义帮助程序

[英]Writing Custom Helpers in Zend Expressive 2

我正在编写一个自定义助手,一切正常。 但我不知道如何传递参数...

在config / autoload / templates.global.php

return [
    'dependencies' => [
        'factories' => [
            TemplateRendererInterface::class => ZendViewRendererFactory::class,
            HelperPluginManager::class => HelperPluginManagerFactory::class,
        ],
    ],

    'templates' => [
        'layout' => 'layout::default',
    ],

    'view_helpers' => [
        'invokables' => [
            'HelperDatetimeFormat' => HelperDatetimeFormat::class,
        ],
        // zend-servicemanager-style configuration for adding view helpers:
        // - 'aliases'
        // - 'invokables'
        // - 'factories'
        // - 'abstract_factories'
        // - etc.
    ],
];

我还有这个:

namespace App\Helper;

use Locale;
use DateTime;
use IntlDateFormatter;

class HelperDatetimeFormat
{
    private $opts;
    private $lang;

    public function __invoke(array $opts)
    {
        $this->opts = $opts;
        return $this->datetimeFormat();
    }

    public function datetimeFormat()
    {
...

如果我使用构造函数,则会收到错误消息……建议使用__invoke()传递参数来构建类吗?

谢谢!

__invoke是您在视图中使用助手时将调用的函数。 我应该只将视图中需要的任何内容用作参数。

$opts数组应该是什么? 如果您需要向该对象中注入一些东西(您的最后一个问题),那么您肯定需要使用构造函数。 您收到的错误是由于您的View Helper被声明为Invokable (构造函数中没有参数的类)而引起的,因此服务管理器试图在不添加参数的情况下创建它。 您应该做的是将其移至工厂。

'view_helpers' => [
    'aliases' => [
        'HelperDatetimeFormat' => HelperDatetimeFormat::class,
    ],
    'factories' => [
        HelperDatetimeFormat::class => HelperDatetimeFormatFactory::class,
    ],
],

工厂类似于:

final class HelperDatetimeFormatFactory
{
    public function __invoke(ContainerInterface $container) : HelperDatetimeFormat
    {
        $params = $container->get('config')['my_params'];
        return new HelperDatetimeFormat($params);
    }
}

当心,此代码对ZF3来说更多。 如果我认为在工厂中传递给__invoke的参数实际上是HelperPluginManager ,它是专门用于查看助手的ServiceLocatorInterface ,因此,要在主ServiceManager声明的ServiceManager (配置数组中的service_manager )将需要对HelperPluginManager进行额外的调用:

public function __invoke(HelperPluginManager $viewHelperContainer) : HelperDatetimeFormat
{
    $params = $viewHelperContainer->getServiceLocator()->get('config')['my_params'];
    return new HelperDatetimeFormat($params);
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM