Frage

Ich kann anscheinend keinen benutzerdefinierten View-Helfer in Zend Framework 2.02 registrieren. Ich habe alle hier veröffentlichten Lösungen ausprobiert und alles, was ich mir vorstellen kann, was ich tun sollte, aber ich erhalte immer wieder diese Fehlermeldung:

Fataler Fehler:Die Klasse „ModuleName\view\Helper\mylinkhelper“ wurde in C:\wamp\vhosts\projectName\vendor\zendframework\zendframework\library\Zend\ServiceManager\AbstractPluginManager.php in Zeile 177 nicht gefunden

Und so sieht meine module.config.php aus:

return array{
      'controllers'=>array(

           ....
       ),
      'view_manager' => array(
          'template_path_stack' => array(
             'ModuleName' => __DIR__ . '/../view',
           ),    
   ),
   'view_helpers' => array(  
            'invokables' => array(  
                 'mylink' => 'ModuleName\view\Helper\mylinkhelper',   
             ),  
       ),
};

In meiner Ansichtsdatei habe ich:

echo $this->mylink($someparameter); 

Ich freue mich über jedes Feedback hierzu.Ich weiß wirklich nicht, was ich hier sonst tun soll.

War es hilfreich?

Lösung

<?php
// ./module/Application/src/Application/View/Helper/AbsoluteUrl.php
namespace Application\View\Helper;

use Zend\Http\Request;
use Zend\View\Helper\AbstractHelper;

class AbsoluteUrl extends AbstractHelper
{
    protected $request;

    public function __construct(Request $request)
    {
        $this->request = $request;
    }

    public function __invoke()
    {
        return $this->request->getUri()->normalize();
    }
}

Sie werden feststellen, dass dieser spezielle Helfer eine Abhängigkeit hat – ein Zend\Http equest-Objekt.Um dies einzufügen, müssen wir eine Factory mit der Initialisierungslogik für unseren View-Helper einrichten:

    <?php
    // ./module/Application/Module.php
    namespace Application;

    use Application\View\Helper\AbsoluteUrl;

    class Module
    {
        public function getViewHelperConfig()
        {
            return array(
                'factories' => array(
                    // the array key here is the name you will call the view helper by in your view scripts
                    'absoluteUrl' => function($sm) {
                        $locator = $sm->getServiceLocator(); // $sm is the view helper manager, so we need to fetch the main service manager
                        return new AbsoluteUrl($locator->get('Request'));
                    },
                ),
            );
        }


     // If copy/pasting this example, you'll also need the getAutoloaderConfig() method; I've omitted it for the sake of brevity.
}

Das ist es!Jetzt können Sie Ihren Helfer in Ihren Ansichtsskripten aufrufen:

Die vollständige URL zur aktuellen Seite lautet: <?php echo $this->absoluteUrl(); ?>

Vielen Dank an Evan, der das erstellt hat Lernprogramm

Andere Tipps

Es sieht so aus, als ob der View Helper korrekt zum hinzugefügt wurde ServiceManager seit der Berufung mylink() versucht zu erschaffen ModuleName\view\Helper\mylinkhelper.

Ich würde sicherstellen, dass die Klasse mit erstellt werden kann new College\view\Helper\mylinkhelper(); Von einem Controller aus wird dies wahrscheinlich einige Hinweise liefern.Überprüfen Sie außerdem, ob der Dateiname und der Klassenname korrekt sind.

Ihr Ansatz ist richtig, aber es könnten zwei Dinge sein, die Ihnen dieses Problem bereiten:

  1. Sie sprechen von einem Namespace der obersten Ebene ModuleName, aber in Ihrer Beispielkonfiguration haben Sie den Namespace der obersten Ebene College.Wenn Sie eine haben ModuleName Namespace und Sie versuchen zu laden College, das funktioniert offensichtlich nicht

  2. Ihr View-Helper kann nicht automatisch geladen werden.Sind Sie sicher, dass der Klassenname korrekt ist (MyLinkHelper), der Namespace ist korrekt (College\View\Helper, siehe auch oben) und der Dateiname korrekt ist (MyLinkHelper.php).Und haben Sie das automatische Laden von Klassennamen für dieses Modul in Ihrer Modulklasse aktiviert?

Eine dritte Option könnten die Kleinbuchstaben „view“ und „mylinkhelper“ sein, wie Sie sie normalerweise schreiben würden College\View\Helper\MyLinkHelper mit einem großen V, M, L und H.Aber da Sie unter Windows arbeiten, sollte das eigentlich keine Rolle spielen.Ich weiß, dass Sie bei Linux auf die Groß-/Kleinschreibung von Klassennamen achten müssen.

Das Problem ist, dass die Klassendatei nicht geladen wird .Es soll in autoload_classmap.php enthalten sein. generasacodicetagpre.

Ich rannte in der gleichen Ausgabe und diese Seite hat mir geholfen.

Wie ich mich neu auf ZF bin, weiß ich nicht, ob es eine andere Möglichkeit gibt, die Pfade in Autoload_ClassMap hinzuzufügen, denke ich, dass es wahrscheinlich gibt, aber ich habe die Datei nur manuell bearbeitet.

Ich habe das gleiche Problem und habe selbst herausgefunden, dass die View-Hilfsdatei nicht enthalten war.Als ich es zum Testen in den Controller steckte, funktionierte es

z.B.: require_once('module/Pages/view/Helper/RenderNav.php');

Warum wurde es nicht automatisch geladen?

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top