yii. L'accès à une fonction à partir d'un des modules de contrôleur
J'ai un module dans mon application et en vertu de son contrôleur par défaut, il a une fonction appelée renderPageLinks
qui retourne un tableau de la consommation par un widget.
Le widget, genMenu
, est appelé à partir de /themes/jui/views/layouts/main.php (il génère un menu) j'ai besoin de transmettre les données à partir de la renderPageLinks pour le widget comme une valeur:
$this->widget('pageLinkGen', array('pages' => renderPageLinks()));
Le problème est Yii peux pas trouver la fonction renderPage Liens.
j'ai essayé différentes combinaisons suivantes avec succès..
$this->widget('pageLinkGen', array('pages' => 'application.module.QuickDial.default.renderPageLinks()'));
Des suggestions?
p.s. J'ai essayé de déplacer renderPageLinks()
pour le contrôleur pageLinkGen mais Yii ne pouvez pas trouver le modèle utilisé dans renderPageLinks()
.
- sur une suggestion d'un autre site, j'ai essayé
$this->widget('pageLinkGen', array('pages' => Yii::app()->getModule('QuickDial')->renderPageLinks()));
avec tous les résultats. J'ai reçu le message d'erreur suivant: QuickDialModule et de ses comportements n'ont pas de méthode ou de la fermeture, nommé "renderPageLinks". - pour cette suggestion de travailler, vous aurez à déclarer la fonction dans l'endroit approprié, voir ma réponse, j'ai expliqué les trois méthodes que je pouvais penser. deux de ceux que vous avez déjà exploré, mais pas correctement.
Vous devez vous connecter pour publier un commentaire.
En supposant que le modèle que vous interrogez est à l'intérieur de votre module, il existe 3 solutions de contournement.
Un
Ce que vous pouvez faire est de définir votre
renderPageLinks()
fonction dans le QuickDialModule.php fichier, je l'ai.e à l'intérieur de la QuickDialModule classe. Ensuite, vous pouvez l'utiliser comme ceci:Vous devez écrire cette fonction à l'intérieur de votre QuickDialModule classe :
Modifier:
Les contrôleurs sont instanciés par yii uniquement lorsque l'application reçoit les demandes d'url de l'utilisateur.
Deux
Vous avez un autre travail autour en déclarant votre fonction
static
. Mais alors vous aurez à importer le fichier php qui a de la classe qui a la fonction, dans le yii d'auto-chargement de tableau dans la main.php config fichier. Afin de changer votre defaultcontroller renderPageLinks() la fonction statique:Chargement automatique du contrôleur, par la modification de la configuration principale main.php à l'intérieur protégé/config/dossier:
Appeler la fonction statique directement:
Bien sûr, pour cette méthode statique de travail, vous devez avoir un seul module de contrôleur DefaultController, ou vous ne devez pas importer d'autres modules contrôleurs, en tout cas le nom des conflits pourraient survenir.
Trois
Si vous déplacez la fonction de contrôleur dans le module principal(j'.e pageLinkGen contrôleur de ce que vous avez dit), alors vous aurez à importer le modèle que vous avez besoin dans le module principal de configuration de l'main.php(de sorte que yii pouvez le trouver), pour le chargement automatique de l'importation de tableau ajouter :
de sorte que votre contrôleur peut trouver le modèle.
/protected/model
et créé un portlet dans le/protected/components
Si le contrôleur a la
renderPageLinks
de la fonction, et en supposant que$this
est une référence pour le contrôleur correct, essayez d'appeler à la fonction de référencement par le contrôleur directement:Autant que je sais que PHP ne prend pas en charge implicite
$this
bool.dev suggetion a été grand, mais ne fonctionne toujours pas dans mon cas, je crois que c'était à cause de la désorganisation sur ma fin. J'ai déménagé les modèles de
/protected/models/
et a ensuite créé unCPortlet
objet qui inclus le rendu de la page et d'appel. J'ai de la documentation trouvée ici dans le blog de démonstration. Je n'ai pas scinder la vue formulaire le contrôleur dans ce cas, car actuellement, il est seulement l'appel de la Bootstrap BootNavbar widget. Les prochains thèmes peuvent utiliser une page d'affichage.Merci encore pour votre aide.
Je pense que vous devriez appeler YourModule::renderPageLinks() la méthode d'abord, et de simplement passer retourné les résultats: