2017-10-28 3 views
1

私はカスタムヘルパーを書いています。 私は設定/自動ロード/ templates.global.phpZend Expressive 2でカスタムヘルパーを書く

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()を使用してクラスを構築するためのパラメータを渡すことをお勧めしますか?

ありがとうございます!

答えて

1

__invokeは、ビューでヘルパーを使用するたびに呼び出される関数です。私はあなたが必要とするものをパラメータとしてビューから取り出すだけです。

アレイ$optsには何が含まれていますか?あなたはこのオブジェクト(あなたの最後の質問)に何かを注入する必要がある場合、あなたは間違いなくコンストラクタを使用する必要があります。 受け取ったエラーは、ビューヘルパーが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であるとすれば、は、ヘルパーを表示するために、ServiceManager(構成アレイ内のservice_manager)で宣言されたサービスを探すにはHelperPluginManager

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

非常に興味深いですが、私はこのアプローチを理解しています。 重要なことは、パラメータがどのように通過できるかという点です。日付とパターンのように...設定ファイルからではなく '$ opts = [ 'datetime' => $ this-> usuario ['userDateInscription']、 'format' => ['es_PA'] – greermurray

+0

これらのパラメータは、私の「アプリケーション」のテンプレートに渡されます。 – greermurray

+0

私は問題を正確には分かりません:( 「ランタイム」(実際にはすべてがランタイム、それはPHPです:)のものは何でも、それ以外のものは実行時に使用されます。私が意味することはビューから渡されます)は '__invoke'を通過します。これはあなたのビューで '$ this-> HelperDatetimeFormat(['datetime' => $ this-> usuario ['userDateInscription']、 'format' => '' es_PA '=>' ccc、 d 'de' LLL 'de' y]]、)) '(これは醜いです、コンストラクタから分かりやすいデフォルトを設定しようとします)。 –

関連する問題