Chapitre: Nouveautés
| ^ Introduction | Migration depuis une version précédente de jelix » |
− Table des matières
Version en développement.
Nouveautés apportées par la version 1.9 ¶
Attention : la documentation n'est pas encore à jour vis à vis de ces nouveautés.
Jelix 1.9 est compatible avec PHP 8.2 jusqu'à PHP 8.5.
Principales nouveautés ¶
- précompilation des templates, daos, forms, locales et de la configuration lors de l'installation, et non plus à la volée
- Syntaxe V2 dans les templates (principalement, les tags
{{ ... }}ou{% ... %}remplacent les tags{ .. }) - Locales pouvant être stockées dans des paquets composer séparés, et support déprécié des charsets autre que UTF-8
- Déclaration des listeners d'évènements au moyen d'attributs PHP
- jDb repose maintenant sur JelixDatabase : support des schemas, generated columns...
- jDao repose maintenant sur JelixDao : support natif des champs JSON, class custom pour les factories.
- Les modules jacl, jacldb, jpref et jpref_admin ne sont plus fournis avec Jelix, mais restent disponibles dans des paquets composer.
Nouvelles fonctionnalités ¶
Précompilation ¶
Certains fichiers ne sont désormais plus compilés à la volée, mais uniquement pendant l’installation. Cela évite de lancer des compilateurs pendant une requête HTTP, afin d’améliorer les performances.
Fichiers compilés pendant l’installation :
- configuration
- fichiers de propriétés pour les locales
- liste des écouteurs d’événements
- correspondance des URL
- formulaires
- fichiers de templates ayant l’extension
ctpl(syntaxe v2 de Castor) - Daos
Pendant le développement, vous pouvez configurer un "watcher" de fichiers (dans votre IDE par exemple)
qui appellera php dev.php compile $FULLPATH_OF_FILE, afin de compiler un seul
fichier sans appeler l’installeur avant chaque test dans votre navigateur.
Noyau ¶
Autoload dans module.xml : autorise les répertoires de fallback PSR comme dans composer.json. Vous pouvez définir un répertoire sans espace de noms. Ce répertoire sera une racine pour les espaces de noms qui ne correspondent pas aux autres règles.
Templates ¶
La syntaxe Castor v2 est désormais prise en charge dans les fichiers de templates ayant l’extension ctpl.
Ces templates sont compilés pendant l’installation.
Comme, par défaut, ils sont considérés comme fiables et comme des templates HTML, la compilation d’un template peut échouer si le format n’est pas du HTML.
Aussi il est fortement recommandé d’utiliser les instructions pragma {! output-type = ... !}
pour spécifier un type de contenu autre que HTML, et d’utiliser {! trusted = false!},
s’il ne s’agit pas d’un template fiable. Ainsi, la compilation pendant l’installation
sera effectuée correctement.
Locales ¶
- Les classes
jLocaleetjBundlesont obsolètes et remplacées parJelix\Locale\LocaleetJelix\Locale\Bundle. - Ces nouvelles classes ne prennent en charge que les jeux de caractères UTF-8.
Jelix\Locale\LocaleappellejLocalesi le jeu de caractères par défaut n’est pas UTF-8. - Les fichiers de propriétés sont désormais compilés pendant l’installation afin d’améliorer les performances à l’exécution, et sont utilisés par les nouvelles classes. Les classes obsolètes continuent à compiler les fichiers à l’exécution.
- Nouvelles méthodes
Locale::getBundle()etBundle::getAllKeys(). - Les locales peuvent se trouver dans un répertoire extérieur à une application, par exemple dans un paquet Composer.
Le répertoire doit être déclaré avec la nouvelle API
jApp::declareLocalesDir().
Événements ¶
Les classes jEvent et jEventListener sont obsolètes et remplacées par \Jelix\Event\Event
et \Jelix\Event\EventListener.
La déclaration d’un écouteur d’événements peut désormais être faite dans la classe de l’écouteur avec des attributs PHP.
Dans ce cas, la classe de l’écouteur peut être n’importe quelle classe, et pas seulement une classe héritant
de \Jelix\Event\EventListener. Cependant, la classe de l’écouteur doit toujours être
déclarée dans les fichiers event.xml.
<events xmlns="http://jelix.org/ns/events/1.0">
<listener name="\JelixTests\Tests\Listener\TestAttrEventsListener"/>
</events>
use Jelix\Event\Attribute\ListenEvent;
use Jelix\Event\Attribute\ListenEventClass;
class TestAttrEventsListener
{
#[ListenEvent('TestEvent')]
function onTestEvent ($event) { }
#[ListenEventClass]
function testEventObject(EventForTest $event) { }
}
Formulaires ¶
- Prise en charge de
<placeholder>dans<input>,<textarea>,<htmleditor>,<wikieditor>. - Les formulaires sont compilés pendant l’installation de l’application afin d’améliorer les performances à l’exécution.
Base de données ¶
jDb repose désormais sur JelixDatabase.
La classe jDb existe toujours, mais la plupart des classes internes de jDb
ont disparu et sont remplacées par des classes de JelixDatabase, même si de nombreuses anciennes classes
existent encore (mais peuvent être vides) afin de ne pas casser les paramètres typés dans vos
classes.
Cela apporte de nouvelles fonctionnalités :
- Prise en charge des noms de schémas dans les noms de tables, pour certaines API.
- Prise en charge des colonnes générées de PostgreSQL (contributeur : Riccardo Beltrami).
- Prise en charge des colonnes Identity pour PostgreSQL.
- Correction de lastInsertId pour SQLServer.
- Prise en charge de l’API mssql supprimée. Seul le connecteur utilisant l’API sqlsrv est disponible.
- Version minimale des bases de données prises en charge :
- Mysql : 8.*
- PostgreSQL : 13
Les plugins pour jDb (alias « drivers ») implémentant des connecteurs, etc., ne sont plus pris en charge. Ils ont été remplacés par des classes fournies directement par le paquet JelixDatabase.
Dao ¶
jDao repose désormais sur JelixDao.
La classe jDao reste la classe principale à utiliser pour charger et utiliser Dao.
La plupart des classes internes de jDao ont disparu et sont remplacées par des classes de JelixDao,
même si de nombreuses anciennes classes existent encore (mais peuvent être vides) afin de ne pas casser
les paramètres typés dans vos classes.
Cela apporte de nouvelles fonctionnalités :
- prise en charge native des champs JSON : les propriétés dao ayant le datatype
jsonsont automatiquement encodées lors d’un insert/update, ou décodées lors d’un select. - Possibilité d’indiquer une classe dont la classe factory générée héritera.
Le nom de classe doit être indiqué dans l’attribut
extendsde<factory>. La classe peut se trouver n’importe où et doit pouvoir être chargée automatiquement. La classe doit hériter dejDaoFactoryBaseet elle doit être abstraite.
Autres changements :
- Les plugins pour le compilateur jDao (type « daobuilder ») ne sont plus pris en charge.
- Les fichiers Daos sont compilés pendant l’installation de l’application afin d’améliorer les performances à l’exécution.
- Les classes générées à partir des fichiers daos ont de nouveaux noms et sont chargées automatiquement.
jSelectorDao,jSelectorDaoDbetjSelectorDaoRecordsont obsolètes et existent sous de nouveaux noms.
Autres nouvelles fonctionnalités ¶
- Nouvelles méthodes
jFile::mergeIniFile()etjFile::mergeIniContent().
Suppressions ¶
- Suppression de la prise en charge du cache de bytecode autre qu’opcache.
- Suppression des modules
jacletjacldb. Ils sont encore disponibles dans le paquetjelix/jacl-module. Mais vous devez les considérer comme une archive. Vous devez migrer vers jacl2 et jacl2db. - Suppression des modules
jprefetjpref_admin. Ils sont encore disponibles dans le paquetjelix/jpref-module. Mais vous devez les considérer comme une archive. Vous devez développer une alternative à ces modules. - Les plugins pour jDb et jDao n’existent plus.
- Tous les messages d’erreur sont désormais uniquement en anglais. Plus de locales
jelix~db.*,jelix~daoxml.*etjelix~dao.*. - Il n’y a plus de prise en charge des tests phpunit dans les modules.
tests/runtests.phpdans l’application ne fonctionne plus.
API incompatible ¶
- L’interception d’une exception concernant un profil invalide/inconnu (jProfile) doit désormais se faire
en interceptant
\Jelix\Profiles\Exceptionau lieu dejException. jFormsCompiler,jFormsCompiler_jf_1_0,jFormsCompiler_jf_1_1ont été renommés enJelix\Forms\Compiler\FormCompiler,Jelix\Forms\Compiler\/XmlCompiler10,Jelix\Forms\Compiler\/XmlCompiler11, et n’existent donc plus.
Fonctionnalités obsolètes ¶
- La propriété de configuration
charsetest obsolète. Vous devez conserver la valeur par défaut à UTF-8. Sinon, convertissez vos locales et autres données en UTF-8, car la prise en charge des autres jeux de caractères disparaîtra dans la prochaine version majeure. \Jelix\Core\Profilesdoit être utilisé à la place dejProfiles. Même API, mais elle repose désormais sur la bibliothèque JelixProfiles.jProfilesest obsolète, de même que les méthodesstoreInPool,getFromPool,getOrStoreInPool. UtilisezstoreConnectorInPool,getConnectorFromPool,getConnectorFromCallbackà la place.- S’il existe des plugins pour jProfiles, ils doivent hériter de
\Jelix\Profiles\ReaderPluginau lieu dejProfilesCompilerPlugin, ou ils doivent implémenter au moins la nouvelle interface\Jelix\Profiles\ProfilePluginInterface.jProfilesCompilerPluginest obsolète. jClassBindingjelix_read_ini- jDao : type de méthode
xml. Une classe PHP doit être utilisée à la place, déclarée dans l’attributextendsde<factory>. - L’objet de requête HTTP
cssest obsolète. - La constante
JELIX_SCRIPTS_PATHest désormais obsolète, car elle devient inutile. - Les fonctions déclarées dans l’espace de noms
Jelix\Utilitiessont obsolètes. Utilisez-les depuis l’espace de nomsJelix\Core\Utilities. - L’interface
\jelix\Core\ConfigCompilerPluginInterfaceest obsolète. Utilisez\Jelix\Core\Config\CompilerPluginInterfaceà la place. - Classes de sélecteurs :
jSelectorAppCfg,jSelectorCfg,jSelectorDebugAction,jSelectorLib,jSelectorTmp,jSelectorVar - Remplacer
jSelectorModuleparJelix\Core\Selector\ModuleSelector. - Remplacer
jISelectorparJelix\Core\Selector\SelectorInterface. - Remplacer
jExceptionSelectorparJelix\Core\Selector\Exception. jelix_scan_module_sel- Les classes
jLocaleetjBundlesont obsolètes et remplacées parJelix\Locale\LocaleetJelix\Locale\Bundle. - La méthode
jConfigCompiler::findServerName()a été déplacée versjServer. jSelectorForm
À propos de jDb :
jDbConnectionetjDbPDOConnectionsont obsolètes et remplacés par des objets implémentantJelix\Database\ConnectionInterfaceetJelix\Database\ConnectionConstInterface.- Les constantes
FETCH_*,ATTR_*etCURSOR_*sont déplacées versConnectionConstInterface.
- Les constantes
jDbResultSetetjDbPDOResultSetsont obsolètes et remplacés par des objets implémentantJelix\Database\ResultSetInterface.jDbParametersest obsolète et remplacé par\Jelix\Database\AccessParameters.- Les méthodes publiques sont les mêmes, cependant
getParameters()est obsolète,getNormalizedParameters()doit être utilisé à la place.
- Les méthodes publiques sont les mêmes, cependant
jDbToolsest obsolète et remplacé par des objets implémentantJelix\Database\Schema\SqlToolsInterface.- Les méthodes
getFieldList()etgetTableList()sont obsolètes. - Les constantes
IBD_*sont déplacées versSqlToolsInterface.
- Les méthodes
jDbSchemaest obsolète et remplacé par des objets implémentantJelix\Database\Schema\SchemaInterface.jDbIndex,jDbConstraint,jDbUniqueKey,jDbPrimaryKey,jDbReference,jDbColumn,jDbTablesont remplacés par certaines classes de l’espace de nomsJelix\Database\Schema\.jDbUtilsetjDbUtils::getTools()sont obsolètes et remplacés par\Jelix\Database\Connection::getTools().jDbWidgetest obsolète et remplacé parJelix\Database\Helpers.jDaoDbMapper::createTableFromDao()retourne un objet\Jelix\Database\Schema\TableInterfaceau lieu dejTable.
À propos de jDao :
jDaoFactoryBaseest remplacé par des objets implémentantJelix\Dao\DaoFactoryInterface.jDaoRecordBaseest remplacé par des objets implémentantJelix\Dao\DaoRecordInterface.- Les méthodes
getDbProfileetsetDbProfilen’existent pas surJelix\Dao\DaoRecordInterface. - La méthode
getSelector()est obsolète,getDaoName()doit être utilisé à la place.
- Les méthodes
jDaoConditionsetjDaoConditionsont obsolètes et remplacés par\Jelix\Dao\DaoConditionset\Jelix\Dao\DaoCondition.jDaoXmlExceptionest obsolète et n’est plus utilisé. Le parseur génèreJelix\Dao\Parser\ParserExceptionà la place.jDaoGeneratoretjDaoParsersont supprimés.jDaoMethodest remplacé parJelix\Dao\Parser\DaoMethod.jDaoPropertyest remplacé parJelix\Dao\Parser\DaoProperty.jDaoDbMapperest remplacé parJelix\Dao\DbMapper.- Les classes
jDaoSelector*sont remplacées par les classesJelix\Dao\DaoSelector*.
Changements internes ¶
- Constante
JELIX_SCRIPTS_PATH: sa valeur est désormais<vendor path>/lib/JelixFramework/DevHelper/.
Contributeurs à Jelix 1.9 ¶
- Laurent Jouanneau
- Raphael Martin
- Riccardo Beltrami


