簡體   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