1

Ich verwende eine module namens Facebook, die eine Sicht Helper namens shareUrl hat. Dieser View-Helfer erhält die Facebook-Share-URL für jede URL.php - Widersprüchliche View-Helper-Namen in Zend Framework

Allerdings habe ich vor kurzem eine weitere module namens Twitter hinzugefügt, die auch eine Ansicht Helfer namens shareUrl hat.

In Zend Framework Version 2 oder 3, wie innerhalb von Ansichten, wie kann ich einen shareUrl View-Helfer im Vergleich zu den anderen aufrufen?

Nur um zu klären, sieht der Code aus meiner Sicht wie folgt aus:

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

würde ich $facebookShareUrl und $twitterShareUrl wie die Rückgabewerte von zwei verschiedenen View Helfer zu speichern.

+0

Wie haben Sie diese Helfer (in Modulkonfigurationsdateien) registriert? – gsc

Antwort

6

Wenn Sie zwei Helfer mit demselben Namen haben, ist nur einer verfügbar, da er unter dem Vornamen im Servicemanager (viewhelpermanager) registriert ist. Wenn Sie sie mit dem Laden der Module in Ihrem application.config.php wechseln, können Sie den Standard ändern. Aber das ist keine echte Lösung für Ihr Problem.

So gibt es mehrere Möglichkeiten, den richtigen Viewhelper zu bekommen, den Sie brauchen.

1) Der beste Weg besteht darin, einen Alias ​​für die registrierten Viewhelper mit ihrem FQCN einzurichten. Sehen Sie einig Beispiel-Code, wo wir Aliase erstellen, die in dem viewherlpers verwendet werden können, wie $this->facebookShareUrl('exmaple.com')

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

2) Holen Sie sich den Helfer durch seine FQCN mit dem viewhelpermanager in der Ansicht selbst, mit der PhpRenderer Instanz. Innerhalb einer view.phtml Datei

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

Ich habe Methode 1 ausprobiert, bekomme aber die Fehlermeldung 'Ein Plugin mit dem Namen" facebookShareUrl "wurde im Plugin-Manager Zend \ View \ HelperPluginManager' nicht gefunden. Gibt es weitere Schritte, die ich unternehmen muss, damit diese Methode funktioniert? –

+1

Sie müssen herausfinden, wie sie den Viewhelper in ihrem Modul registriert haben. Ich hatte keine Ahnung, welches Paket/welche Bibliothek du benutzt hast, also habe ich versucht, eine generische Lösung zu geben, die du an deine Situation anpassen musstest. Wenn Sie die Repos mit den Paketen auf github/packagist verknüpfen könnten, könnte ich das Beispiel für Sie optimieren. – Kwido

+1

Vielen Dank! Aufgrund Ihrer Antwort konnte ich die Module aktualisieren. Die Lösung für mich bestand darin, die Abschnitte "Aliase" und "Fabriken" in den aufgerufenen Modulen unter "view_helpers" hinzuzufügen. Ich bin mir nicht sicher, ob dies funktioniert hätte, wenn die Module nur den Abschnitt "Fabriken" enthielten, aber glücklicherweise besitze ich diese Module, so dass ich sie aktualisieren konnte. –