Errore di assistenza personalizzato Visualizza in zend Framework 2
-
12-12-2019 - |
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.
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:
- .
-
Parli di uno spazio dei nomi di alto livello
ModuleName
, ma nella configurazione di esempio hai il livello dei nomi del livello superioreCollege
.Quando si dispone di uno spazio dei nomiModuleName
e si tenta di caricareCollege
, che ovviamente non funziona -
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?