1

というmoduleという名前のビューヘルパー(shareUrl)が使用されています。このビューヘルパーは、任意のURLのFacebook共有URLを取得します。php - Zend Frameworkのビューヘルパーの名前が矛盾しています

しかし、私は最近Twitterという別のmoduleを追加しました。これにはshareUrlというビューヘルパーもあります。

Zend Frameworkのバージョン2または3では、ビュー内で、どのようにしてshareUrlビューヘルパーと他のビューヘルパーを呼び出すことができますか?ただ、明確にする

、私の見解では、コードは次のようになります。

$facebookShareUrl = $this->shareUrl('https://www.example.com/'); 
$twitterShareUrl = $this->shareUrl('https://www.example.com/'); 

私は2つの異なるビューヘルパーの戻り値を格納する$facebookShareUrl$twitterShareUrlをしたいと思います。

+0

どのようにこれらのヘルパーを(モジュール設定ファイル内に)登録しましたか? – gsc

答えて

6

同じ名前の2つのヘルパーがある場合は、サービスマネージャ(viewhelpermanager)内の指定された名前で登録されているため、1つしか利用できません。 application.config.phpにモジュールをロードしてスイッチを切り替えると、デフォルトを変更できます。しかし、それはあなたの問題に対する真の解決策ではありません。

必要なビューヘルパーを得るには複数の方法があります。

1)FQCNを使用して、登録されたビューヘルパーのエイリアスを設定することをお勧めします。 PhpRendererインスタンスを使用して、ビュー自体にviewhelpermanagerを使用して、そのFQCNでヘルパーを取得します)私たちは$this->facebookShareUrl('exmaple.com')

return [ 
    'view_helpers' => [ 
     'aliases' => [ 
      'facebookShareUrl' => FacebookModule\Helper\ShareUrlHelper::class, 
      'twitterShareUrl' => TwitterModule\Helper\ShareUrlHelper::class, 
     ], 
    ] 
] 

2のようなviewherlpersで使用することができますエイリアスを作成し、いくつかのサンプルコードを参照してください。 view.phtmlファイル

$viewHelperManager = $this->getHelperPluginManager(); 
$facebookShareUrlHelper = $viewHelperManager->get(FacebookModule\Helper\ShareUrl::class); 
$twitterShareUrlHelper = $viewHelperManager->get(TwitterModule\Helper\ShareUrl::class); 
+0

私は方法1を試みましたが、プラグインマネージャZend \ View \ HelperPluginManager'に「facebookShareUrl」という名前のプラグインが見つかりませんでした。この方法を動作させるために必要な追加ステップはありますか? –

+1

ビューヘルパーのモジュール内での登録方法を調べる必要があります。どのパッケージ/ライブラリを使用していたのか分かりませんでしたので、あなたの状況に合わせて調整しなければならない汎用的なソリューションを提供しようとしました。リポジトリをgithub/packagistのパッケージにリンクさせることができれば、私はあなたのための例を微調整することができます。 – Kwido

+1

ありがとう!あなたの返信に基づいて、私はモジュールを更新することができました。私の解決策は、呼び出されているモジュールの 'view_helpers'の下に 'aliases'と 'factories'の両方のセクションを追加することでした。モジュールが 'factories'セクションのみを含んでいてもこれがうまくいくかどうかはわかりませんが、幸いにも私はこれらのモジュールを所有していますので、それらを更新することができました。 –

関連する問題