web-dev-qa-db-fra.com

Comment les contrôleurs d'une vue spécifique sont-ils appelés?

J'essaie de comprendre comment le composant com_installer (le composant pour l'installation des extensions) dans le dossier de l'administrateur dans joomla fonctionne sous le capot. En particulier, j'essaie de comprendre ce qui se passe lorsque vous soumettez l'extension Zip téléchargée.

Dans default.php dans

com_installer/views/install/tmpl

J'ai trouvé le code suivant:

 <form enctype="multipart/form-data" action="<?php echo JRoute::_('index.php?option=com_installer&view=install');?>" method="post" name="adminForm" id="adminForm" class="form-horizontal">

ce qui semble indiquer que le fichier téléchargé est envoyé à la même vue d'installation elle-même (la même vue que vous êtes lorsque vous téléchargez le fichier). Maintenant, dans le contrôleur correspondant à la vue, il semble que le modèle correspondant soit appelé et qu'il appelle la fonction correspondante dans le modèle pour installer l'extension.

Maintenant, ce que je soupçonnais, c’est que lorsque vous demandez une certaine vue, Joomla ira d’abord au contrôleur correspondant (le cas échéant) et verra s’il existe une fonction portant le même nom que la vue (dans le cas de l’installateur, le view is install, un contrôleur est installé avec une fonction install () à l’intérieur).

Faisons cependant un test simple pour cela, où j’ai une vue appelée contentimporter, et le contrôleur correspondant:

class ContentImporterControllerContentImporter extends JControllerLegacy
{
    public function contentImporter() {
        $redirect_url = 'index.php?option=com_installer';
        $this->setRedirect($redirect_url);
    }

maintenant, si cette fonction a effectivement été appelée lors du passage à index.php? composant = com_contentimporter & view = contentimporter, je serais redirigé vers le composant d'installation, mais ce n'est pas le cas.

Toute aide quant à la façon dont je pense mal serait grandement appréciée!

6
user1306192

Vous devez également prendre en compte les données enregistrées avec le formulaire. Donc, si vous regardez la ligne 179 de ce fichier de modèle default.php, vous verrez:

<input type="hidden" name="task" value="install.install" />

La chaîne est au format "controller.method". Cela indique à Joomla de charger le contrôleur d'installation (com_installer/controllers/install.php) et d'appeler sa méthode install ().

Vous pouvez voir comment l'instance de contrôleur est générée et charge le contrôleur en fonction de la valeur de la tâche en consultant la ligne 230/Legacy/Controller/Legacy.php:

public static function getInstance($prefix, $config = array()) 

Une dernière chose à noter est souvent que JavaScript sur le bouton 'enregistrer' définira/modifiera également la valeur de l'entrée de la tâche. Il est donc utile de vérifier si vous tentez de déterminer quelle tâche est soumise.

5
Rob Clayburn