Question

Je n'arrive pas à enregistrer un assistant de vue personnalisé dans Zend Framework 2.02. J'ai essayé toutes les solutions publiées ici et tout ce que je pense devoir faire, mais j'obtiens toujours cette erreur :

Erreur fatale:Classe 'ModuleName\view\Helper\mylinkhelper' introuvable dans C:\wamp\vhosts\projectName\vendor\zendframework\zendframework\library\Zend\ServiceManager\AbstractPluginManager.php à la ligne 177

Et voici à quoi ressemble mon module.config.php :

return array{
      'controllers'=>array(

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

dans mon fichier de vue, j'ai :

echo $this->mylink($someparameter); 

J'apprécie tout commentaire à ce sujet.Je ne sais pas vraiment quoi faire d'autre ici.

Était-ce utile?

La solution

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

Vous remarquerez que cette aide particulière a une dépendance - un objet Zend \ http \ requête.Pour injecter cela, nous devrons mettre en place une usine avec la logique d'initialisation de notre aide d'affichage:

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

C'est ça!Maintenant, vous pouvez appeler votre aide dans vos scripts de vue:

L'URL complète à la page en cours est la suivante: <?php echo $this->absoluteUrl(); ?>

Merci à Evan pour créer ce tutoriel

Autres conseils

Il semble que View Helper soit correctement ajouté au ServiceManager depuis l'invocation mylink() essaie de créer ModuleName\view\Helper\mylinkhelper.

Je m'assurerais que la classe est créable avec new College\view\Helper\mylinkhelper(); à partir d'un contrôleur, cela est susceptible de donner des indices.Vérifiez également que le nom de fichier et le nom de classe sont corrects.

Votre approche est correcte, mais deux choses peuvent vous causer ce problème :

  1. Vous parlez d'un espace de noms de niveau supérieur ModuleName, mais dans votre exemple de configuration, vous avez l'espace de noms de niveau supérieur College.Quand tu as un ModuleName espace de noms et vous essayez de charger College, ça ne marche évidemment pas

  2. Votre assistant de visualisation ne peut pas être chargé automatiquement.Êtes-vous sûr que le nom de la classe est correct (MyLinkHelper), l'espace de noms est correct (College\View\Helper, voir aussi ci-dessus) et le nom du fichier est correct (MyLinkHelper.php).Et avez-vous activé le chargement automatique du nom de classe pour ce module dans votre classe de module ?

Une troisième option pourrait être les minuscules « view » et « mylinkhelper », comme vous l'écrivez habituellement. College\View\Helper\MyLinkHelper avec un V, M, L et H majuscules.Mais puisque vous êtes sous Windows, cela ne devrait pas avoir d’importance, autant que je sache.Je sais que pour Linux, vous devez être conscient de la sensibilité à la casse des noms de classe.

Le problème est que le fichier de classe n'est pas chargé .C'est censé être inclus dans AUTOLOAD_CLASSMAP.PHP.

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

J'ai couru dans le même problème et cette page m'a aidé.

Comme je suis nouveau à Zf, je ne sais pas s'il y a une autre façon d'ajouter les chemins en autoload_classmap, je pense probablement qu'il y en a, mais je viens de modifier le fichier manuellement.

a eu le même problème, découvert par moi-même que View Helper File n'était pas inclus.Tout en le mettant dans le contrôleur pour tester cela fonctionnait

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

Pourquoi il n'a pas été fait automatiquement?

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top