Introduction
Dans la phase précédente (voir l'article correspondant...), vous avez restructuré l'ensemble de votre code et son arborescence, afin qu'elle soit compatible avec le MVC de Joomla4 et 5.
Les tests de fonctionnement du site étant réalisé et concluants, nous allons maintenant passer en mode MVC Joomla 4/5.
Article en cours de rédaction...
Deux chose sont maintenant à faire :
"Ecapsuler" votre extension dans un conteneur avec les services qu'il utilisera :
- administrator/components/moncomponent/services/provider.php
Definir le nouveau point d'entrée de votre composant
Ce dernier sera dorenavant plus :
- /components/moncomposant.php pour le front
- /administrator/componants/moncomposant.php pour l'admin
mais
- components/moncomponent/src/Extension/MoncomponsantComponent.php pour le front
- administrator/components/moncomponent/src/Extension/MoncomponsantComponent.php pour l'admin
Le "provider" (fournisseur de services)
Voir aussi, l'article correspondant du "book" deNikolaos Dionysopoulos...
La présence du fichier administrator/components/moncomponent/services/provider.php permettra à Joomla de savoir que votre composant est écrit en mode Joomla MVC 4 et 5.
On s'inspirera de l'axemble de l'ouvrage cité ci-dessus, sinon d'un fichier provider d'une extension native de joomla (com_content ou com_contact pas exemple).
Le point d'entrée (La classe générale de votre composant)
Voir aussi, l'article correspondant du "book" deNikolaos Dionysopoulos...
Il se situe en /administrator/components/com_moncomposant/src/Extension/MoncomposantComponent.php
C'est la ca&lsse principale de votre composant, necessaire.
Le controleur géneral
le fichier controller.php à la racine de votre composant est supprimé et remplacé par src/Dispatcher/Dispatcher.php
Voir aussi, l'article correspondant du "book" deNikolaos Dionysopoulos ...
En général, il n'est pas nécessaire, la classe mère, le dispatcheur de Joomla4 sera suffisant.
Les services complementaires
La gestion des catéogiries et du routeur differents un peu de Joomla MVC3 et nécessitent des fichiers en /components/com_moncomposant/src/Service
Les Categories
Normalement elles ont déjà été traitées (voir article précedent)
Le router
Il faudra certainement réécrire les regles.
L'ancien router en /components/com_moncomposant/router.php
Le nouveau sera en components/com_moncomposant/src/Service/Router.php
On lui donnera son namespace Masociete\Component\Moncomposant\Site\Service
On se referera au router d'un composant natif de Joomla ou à l'article correspondant du "book" deNikolaos Dionysopoulos ...
Les classes sous Joomla3 sont généralement préfixées (tables, model).
Tant que l'on reste en mode legacy (MVC Joomla3), il faura maintenir ces prefixes (methodes getModel des controleurs, ou appel des classes de Table (anciennes métodes Table::getInstance),
Par contre quand on passera en mode natif MVC Joomla4 et +, lors des appels vu que l'on travaillera dans un conteneur identifiant déjà l'extession, et que les prefixe des noms de classes ne sont plus nécessaire (et ont été supprimés), la notion de prefixe identifiera l'application (Administrator ou Site par exemple).
Les Controlleurs
Attention aux methodes getModel de vos controlleurs.
Sous Joomla3 (donc en mode Legacy (MVC Joomla3), on gardera les prefixes de vos Models, mais en mode MVC Joomla4 il faudra y mettre le type d'application concernée (donc Administrator ou Site) ou rien et dans ce cas la ca&lsse mêre prendra le type d'application en cours (Site, Administraotr).
Router
Si vous ne souhaitez pas utiliser un router il faut retirer les lignes correspondantes dans /administrator/components/com_moncomposant/src/Extension/MoncomponsantComponent.php :
dans la rubrique "implements" de la classe, retirer :
- RouterServiceInterface
- et le use RouterServiceTrain