Domanda

Non riesco a registrare un helper di visualizzazione personalizzato in Zend Framework 2.02 Ho provato tutte le soluzioni inviate qui e tutto ciò che posso pensare che dovrei fare, ma continuo a ricevere questo errore:

.

Errore irreversibile: Classe 'ModuleName \ View \ Helper \ MyLinkhelper' non trovato in c: \ wamp \ vhosts \ Projectname \ Vendor \ zendframework \ zendframework \ Library \ Zend \ ServiceManager \ Abstractpluginmanager.php on line 177

Ed ecco come il mio modulo.Config.php sembra:

.

return array{
      'controllers'=>array(

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

Nel mio file di visualizzazione, ho:

echo $this->mylink($someparameter); 
.

Apprezzo qualsiasi feedback su questo.Non so davvero cos'altro fare qui.

È stato utile?

Soluzione

<?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();
    }
}
.

Noterai che questo particolare aiutante ha una dipendenza - un oggetto Zend \ http \ richiesta.Per iniettare questo, avremo bisogno di creare una fabbrica con la logica di inizializzazione per il nostro aiutante di visualizzazione:

    <?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.
}
.

Questo è tutto!Ora puoi chiamare il tuo aiutante negli script di visualizzazione:

L'URL completo alla pagina corrente è: <?php echo $this->absoluteUrl(); ?>

Grazie a Evan per creare questo tutorial

Altri suggerimenti

Sembra che l'helper della vista sia correttamente aggiunto al ServiceManager poiché richiamare mylink() sta tentando di creare ModuleName\view\Helper\mylinkhelper.

Asserverei che la classe sia creata con new College\view\Helper\mylinkhelper(); da un controller, è probabile che vino vomitare alcuni indizi.Controllare anche il nome file e il nome del nome sono corretti.

Il tuo approccio è corretto, ma potrebbero esserci due cose che ti fanno causa questo problema:

    .
  1. Parli di uno spazio dei nomi di alto livello ModuleName, ma nella configurazione di esempio hai il livello dei nomi del livello superiore College.Quando si dispone di uno spazio dei nomi ModuleName e si tenta di caricare College, che ovviamente non funziona

  2. Il tuo aiutante non può essere automatico automatico.Sei sicuro che il nome della classe sia corretto (MyLinkHelper), lo spazio dei nomi è corretto (College\View\Helper, vedere anche sopra) e il nome del file è corretto (MyLinkHelper.php).E hai abilitato il riassunto di classe di classe per questo modulo nella classe del modulo?

    Una terza opzione potrebbe essere la "vista" minuscola e "mylinkhelper" come di solito scriverai College\View\Helper\MyLinkHelper con un capitale V, M, L e H. Ma dal momento che sei su Windows che non dovrebbe importare AFAIK.So per Linux devi essere a conoscenza della sensibilità del caso dei nomi di classe.

Il problema è che il file Class non viene caricato .Dovrebbe essere incluso in autoload_classmap.php.

<?php
return array(
    '{module}\View\Helper\{helper}' => __DIR__ . '\View\Helper\{helper}.php',
);
?>
.

Ho corso nello stesso problema e questa pagina mi ha aiutato.

Come sono nuovo a ZF, non so se c'è un altro modo per aggiungere i percorsi in autoload_classmap, penso che probabilmente c'è, ma ho appena modificato il file manualmente.

ha ottenuto lo stesso problema, scoperto da me stesso che Visualizza il file helper non è stato incluso.mentre lo mette in controller per il test ha funzionato

E.G.: require_once('module/Pages/view/Helper/RenderNav.php');

Perché non è stato automatico?

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top