Mise à niveau vers Grav 1.7
Grav 1.7 introduit quelques nouvelles fonctionnalités, améliorations, corrections de bogues et fournit de nombreux changements architecturaux qui ouvrent la voie vers Grav 2.0. Voici quelques faits saillants :
- Objets flexibles : une nouvelle façon de créer vos propres types de données.
- Symfony Server : Exécutez Grav sans avoir à installer de serveur Web.
- Multilingue amélioré : meilleures solutions de remplacement de langue, meilleure prise en charge de l'administration.
- Multi-site amélioré : l'administrateur a amélioré la prise en charge multi-site.
- Amélioration de l'ACL d'administration : prise en charge complète de CRUD pour les utilisateurs et les pages.
- Prise en charge multimédia améliorée : prend en charge le format d'image
webp
, le chargement paresseux et plus encore. - Mise en cache améliorée : nouvelle balise
{% cache %}
et performances améliorées, en particulier dans l'administration. - Détection XSS dans les formulaires : les formulaires ne seront pas soumis si un potentiel XSS y est détecté. Consultez la documentation pour savoir comment désactiver les vérifications.
- Meilleurs outils de débogage : intégration Clockwork, profilage Twig et prise en charge de l'extension PHP Tideways XHProf pour le profilage des performances.
Problèmes les plus courants.
-
Le HTML est affiché sous forme de code sur votre site plutôt que d'être rendu sous forme de HTML comme prévu.
Ce comportement est le résultat de la nouvelle valeur par défaut de l'auto-escaping étant vrai dans Grav 1.7. Il s'agit d'une amélioration de la sécurité, et si vous effectuez une mise à niveau à partir d'une version antérieure à 1.7, nous activons automatiquement le paramètre de compatibilité Twig dans la configuration du système pour garantir que votre ancien code Twig continuera à fonctionner. Si vous effectuez une mise à jour manuelle vers la version 1.7 ou une mise à niveau d'une manière qui ne passe pas par le processus de mise à niveau automatique de GPM, vous devez définir ce paramètre vous-même.
Consultez la section Twig de ce guide pour plus de détails...
-
Obtention d'erreurs à propos de YAML non valide.
Comme nous avons mis à niveau vers une version plus récente du framework Symfony, l'analyseur YAML est plus strict qu'il ne l'était dans les versions antérieures à 1.7. Pour gérer cela, nous avons inclus une ancienne version de l'analyseur qui est disponible lors de l'activation de la compatibilité Yaml. Ceci est automatiquement géré pour vous si vous mettez à niveau vers Grav 1.7 via GPM, mais si vous avez mis à niveau manuellement, vous devrez définir cette valeur vous-même.
Consultez la section YAML de ce guide pour plus de détails...
-
L'administrateur apparaît avec des chaînes non traduites
Si votre administrateur affiche des chaînes non traduites dans l'interface, c'est probablement parce que vous avez précédemment désactivé les traductions linguistiques. C'était bogué dans les versions précédentes de Grav et sa désactivation ne désactivait pas réellement les traductions dans l'administration comme prévu. Ceci est corrigé dans Grav 1.7 et ce paramètre fait ce qu'il est censé faire, afficher les codes de traduction en majuscules plutôt que les chaînes traduites elles-mêmes.
Consultez la section Dépannage pour le correctif.
-
Erreurs lors de l'enregistrement ou des plugins d'administration non fonctionnels
Dans Grav 1.7, nous avons introduit Flex Pages comme nouvelle interface utilisateur de gestion de page par défaut. De plus, pour optimiser les performances, nous avons arrêté d'initialiser les pages à chaque appel de l'administrateur. Revenir aux pages Grav normales peut temporairement résoudre votre problème. Cela se fait en éditant le plugin FlexObjects et en désactivant Pages (Admin).
Pour résoudre correctement le problème, les plugins personnalisés doivent être mis à jour pour prendre en charge à la fois les pages Grav et les pages Flex en utilisant
PageInterface
et doivent également explicitement Pages si nécessaire.Consultez la section Pages et la section Admin de ce guide pour plus de détails...
Il y a également eu des problèmes de plugins spécifiques qui ont déjà été découverts. Consultez la section Dépannage de cette page pour des problèmes spécifiques avec les plugins.
-
Les plans de page cessent de fonctionner ou génèrent une erreur à propos d'une boucle
Grav 1.7.8 ajoute le support pour définir n'importe quel blueprint dans votre thème. Cela signifie que si vous avez des plans de page dans le dossier
blueprints/pages/
, les emplacements de plans standard sont utilisés, tout comme dans les plugins. Malheureusement, certains thèmes plus anciens peuvent avoir un mélange de fichiers dansblueprints/
etblueprint/pages
, ce qui interrompt la détection et provoque soit des champs manquants dans l'administrateur lors de l'édition des pages, soit une erreur fatale :boucle détectée lors de l'extension du fichier blueprint
.Si l'une de ces erreurs se produit, consultez la section Dépannage pour le correctif.
Guide de mise à jour rapide.
YAML.
Pour revenir à l'ancien comportement, vous devez vous assurer que vous disposez des paramètres suivants dans user/config/system.yaml
:
strict_mode:
yaml_compat: true
ou dans Admin sous Configuration → Advanced -> Yaml Compability
Par défaut, Grav 1.7 utilise un analyseur Symfony 4.4 YAML, qui suit plus étroitement la spécification standard YAML que les anciennes versions de Grav. Cela signifie que les fichiers YAML qui fonctionnaient correctement auparavant peuvent provoquer des erreurs résultant d'un YAML non valide. Cependant, Grav reviendra par défaut à l'ancienne version 3.4 de l'analyseur pour que votre site reste opérationnel.
bin/grav yamllinter
ou visiter dans Admin > Tools > Reports avant et après la mise à niveau et corriger tous les avertissements et erreurs liés à YAML.
Twig.
bin/gpm
ou le processus de mise à niveau de Admin Plugin
conserve les paramètres d'échappement automatique existants.
Pour revenir à l'ancien comportement, vous devez vous assurer que vous disposez des paramètres suivants dans user/config/system.yaml
:
twig:
autoescape: false
strict_mode:
twig_compat: true
ou dans Admin sous Configuration → Advanced -> Yaml Compability
Et n'oubliez pas de vider le cache après avoir fait cela !
Le moteur de template Twig a été mis à jour vers la version 1.43, mais il prend également en charge Twig 2.13. Afin de prendre en charge cette nouvelle version de Twig, vous devez mettre à jour toute ancienne syntaxe dans vos modèles Twig. Grav 1.6 Upgrade Guide vous aide à le faire.
Les changements supplémentaires dans les modèles sont :
- Ajout d'une nouvelle balise Twig
{% cache %}
éliminant le besoin d'extension twigcache. - Ajout de la fonction twig
array_diff()
. - Ajout de la fonction twig
template_from_string()
. - Ajout d'une nouvelle fonction twig
svg_image()
pour faciliter l'inclusion de la source SVG dans Twig. - Amélioration de la fonction
url()
twig pour prendre le troisième paramètre(true)
pour renvoyer l'URL sur un fichier inexistant au lieu de renvoyer false. - Amélioration du filtre
|array
twig pour travailler avec les itérateurs et les objets avec la méthodetoArray()
. - Amélioration de la fonction twig
authorize()
pour mieux fonctionner avec les paramètres de règle imbriqués. - Amélioration du filtre de twig
|yaml_serialize
: prise en charge ajoutée des objetsJsonSerializable
et d'autres objets de type tableau. - Ajout de modèles par défaut pour
external.html.twig
,default.html.twig
etmodular.html.twig
. - RUPTURE DE COMPATIBILITÉ ARRIÈRE : Utilisez
{% script 'file.js' at 'bottom' %}
au lieu dein 'bottom'
qui est cassé.
Formulaires.
bin/gpm
ou du processus de mise à niveau de Admin Plugin
, le comportement en mode strict existant est conservé.
Améliorations du mode strict : Dans les formulaires, déclaration de validation : strict
n'était pas aussi strict que nous l'espérions à cause d'un bogue. Le mode strict devrait empêcher les formulaires d'envoyer des champs supplémentaires et cela a été corrigé dans Grav 1.7. Malheureusement, bon nombre des anciens formulaires étaient déclarés stricts même s'ils contenaient des données supplémentaires.
Pour revenir à l'ancien comportement, vous devez vous assurer que vous disposez du paramètre suivant dans user/config/system.yaml
:
strict_mode:
blueprint_compat: true
La détection d'injection XSS est désormais activée par défaut dans tous les formulaires frontaux. Consultez la documentation pour savoir comment désactiver ou personnaliser les vérifications par formulaire et par champ.
Pour cette raison, nous avons ajouté une nouvelle option de configuration system.strict_mode.blueprint_compat: true
pour conserver l'ancien comportement de validation : strict
. Il est recommandé de désactiver ce paramètre pour améliorer la sécurité du site, mais avant cela, veuillez rechercher dans tous vos formulaires si vous utilisiez la fonctionnalité validation : strict
. Si tel était le cas, supprimez la ligne ou testez si le formulaire fonctionne toujours.
Environnements et Multi-Sites.
user://env
. L'ancien emplacement fonctionne toujours, mais il est préférable de déplacer les environnements dans un seul emplacement, les futures fonctionnalités pourraient en dépendre.
Grav 1.7 ajoute également la prise en charge de la configuration de l'environnement basé sur le serveur et de la configuration multisite basée sur le serveur. Cette fonctionnalité est pratique si vous souhaitez utiliser par exemple des conteneurs Docker et que vous souhaitez les rendre indépendants du domaine que vous utilisez. Ou si vous ne souhaitez pas stocker de secrets dans la configuration, mais les stocker dans la configuration de votre serveur.
De plus, le fichier setup.php
peut désormais se trouver dans GRAV_ROOT/setup.php
ou GRAV_ROOT/GRAV_USER_PATH/setup.php
. Le deuxième emplacement facilite l'utilisation des environnements avec des référentiels git contenant uniquement le dossier utilisateur.
Comptes utilisateur.
L'administrateur dispose désormais d'une nouvelle administration de comptes à l'aide d'utilisateurs flexibles :
Pages.
L'administration des pages existantes a été grandement améliorée avec les pages flexibles :
- Affichage de liste retravaillé : bien meilleur support pour les grands sites
- Meilleur contrôle d'accès : prise en charge CRUD ACL avec les propriétaires de pages
- Meilleure prise en charge multilingue
Multilingue.
Grav 1.7 a changé le comportement du fonctionnement des replis multilingues pour les pages.
Auparavant, si la page n'existait pas avec la langue demandée, l'ancienne implémentation recherchait la prochaine langue prise en charge. Cela signifiait que la page non traduite était toujours affichée, mais la page pouvait utiliser une langue inconnue du lecteur.
Le nouveau comportement consiste à se rabattre uniquement sur la langue par défaut du site. Ce comportement par défaut peut être remplacé en définissant des langues de secours par langue à l'aide de l'option de configuration system.languages.content_fallback
.
Si la page n'existe dans aucune des langues de secours, 404 Not Found s'affichera à la place.
system.yaml
ou admin : Configuration > System > Languages > Content Language Fallback
Médias.
La gestion des médias a été grandement améliorée dans Grav 1.7. Certains faits saillants sont :
- Prise en charge du format d'image
webp
. - Markdown : Ajout de la prise en charge des attributs natifs
loading=lazy
sur les images. Peut être défini danssystem.images.defaults
ou par image md avec?loading=lazy
. - Ajout de la possibilité de ne pas traiter des éléments spécifiques
noprocess
uniquement dans les extraits de lien/d'image, par ex.http://foo.com/page?id=foo&target=_blank&noprocess=id
.
CLI.
Certains faits marquants sont :
- Toutes les commandes CLI acceptent maintenant les paramètres
--env
et--lang
pour définir respectivement l'environnement et la langue utilisée (-e
ne fonctionne plus). - Ajout d'une nouvelle commande CLI
bin/grav server
pour exécuter facilement les serveurs Web intégrés Symfony ou PHP. - Vérification améliorée de la commande cron du
Scheduler
et informations CLI plus utiles. - Ajout de la nouvelle option
-r <job-id>
pour la commande CLI du planificateur pour forcer l'exécution d'un travail. - Amélioration de la commande CLI
bin/grav yamllinter
en ajoutant une option pour rechercher les problèmes de YAML Linting à partir de l'ensemble du site ou du dossier personnalisé. - Les échecs de la commande CLI/GPM renvoient désormais un code non nul (permettant la détection d'erreur si la commande échoue).
Configuration.
Ajout d'une nouvelle option de configuration pour conserver la langue par défaut dans les fichiers .md
si elle est définie sur false
.
- system.yaml :
langues.include_default_lang_file_extension
: true|false - Admin : Configuration > Systèmes > Langues > Inclure la langue par défaut dans l'extension de fichier.
Ajout d'une nouvelle option de configuration pour définir les langues de contenu de secours individuellement pour chaque langue.
- system.yaml :
languages.content_fallback
: voir Configuration de la langue - Admin : Configuration > Système > Langues > Langue de remplacement du contenu.
Ajout d'une nouvelle option de configuration pour choisir entre la barre de débogage et le mouvement d'horloge.
- system.yaml :
debugger.provider
: clockwork|debugbar. Admin : Configuration > Système > Débogueur > Fournisseur de débogueur*.
Ajout d'une nouvelle option de configuration pour masquer les informations potentiellement sensibles.
- system.yaml :
debugger.censored
: false|true. - Admin : Configuration > Système > Débogueur > Données sensibles au censeur.
Ajout d'une nouvelle option de configuration pour conserver l'ancienn comportement validation: strict
.
- system.yaml :
strict_mode.blueprint_compat
: true|false. - Admin : Configuration > Système > Avancé > Compatibilité Blueprint.
Ajout de la prise en charge de la configuration système pour les en-têtesHTTP_X_FORWARDED
(hôte désactivé par défaut).
- system.yaml :
http_x_forwarded.protocol
: true|false. - Admin : Configuration > Système > Avancé > HTTP_X_FORWARDED_PROTO activé.
- system.yaml :
http_x_forwarded.host
: true|false. - Admin : Configuration > Système > Avancé > HTTP_X_FORWARDED_HOST activé.
- system.yaml : `http_x_forwarded.port : true|false.
- Admin : Configuration > Système > Avancé > HTTP_X_FORWARDED_PORT activé.
- system.yaml : `http_x_forwarded.ip : true|false.
- Admin : Configuration > Système > Avancé > IP HTTP_X_FORWARDED activé.
Ajout d'une nouvelle option de configuration security.sanitize_svg
pour supprimer le code potentiellement dangereux des fichiers SVG.
- security.yaml :
sanitize_svg
: true|false. - Admin : Configuration > Sécurité > Nettoyer SVG.
DÉVELOPPEURS.
Débogage.
- Ajout de la prise en charge des outils de développement Clockwork (maintenant débogueur par défaut).
- Ajout de la prise en charge de l'extension PHP Tideways XHProf pour les appels de méthode de profilage.
- Ajout du profilage Twig pour le débogueur Clockwork.
Utiliser le chargeur automatique de compositeur.
-
Mise à jour de
bin/composer.phar
vers2.0.2
qui est tout nouveau et beaucoup plus rapide. -
Veuillez ajouter le fichier
composer.json
à votre plugin et exécutercomposer update --no-dev
(et n'oubliez pas de le maintenir à jour) :compositeur.json
{
"name": "getgrav/grav-plugin-example",
"type": "grav-plugin",
"description": "Example plugin for Grav CMS",
"keywords": ["example", "plugin"],
"homepage": "https://github.com/getgrav/grav-plugin-example",
"license": "MIT",
"authors": [
{
"name": "...",
"email": "...",
"homepage": "...",
"role": "Developer"
}
],
"support": {
"issues": "https://github.com/getgrav/grav-plugin-example/issues",
"docs": "https://github.com/getgrav/grav-plugin-example/blob/master/README.md"
},
"require": {
"php": ">=7.1.3"
},
"autoload": {
"psr-4": {
"Grav\\Plugin\\Example\\": "classes/",
"Grav\\Plugin\\Console\\": "cli/"
},
"classmap": [
"example.php"
]
},
"config": {
"platform": {
"php": "7.1.3"
}
}
}
Voir le schéma Composer
-
Veuillez utiliser autoloader au lieu de
require
dans le code :exemple.php
/**
* @return array
*/
public static function getSubscribedEvents(): array
{
return [
'onPluginsInitialized' => [
// This is only required in Grav 1.6. Grav 1.7 automatically calls $plugin->autolaod() method.
['autoload', 100000],
]
];
}
/**
* Composer autoload.
*
* @return \Composer\Autoload\ClassLoader
*/
public function autoload(): \Composer\Autoload\ClassLoader
{
return require __DIR__ . '/vendor/autoload.php';
}
-
Plugins & Thèmes : Appelez
$plugin->autoload()
et$theme->autoload()
automatiquement lorsque l'objet est initialisé. -
Assurez-vous que votre code n'utilise pas
require
ouinclude
pour charger des classes.
Blueprints de plugins/thèmes (blueprints.yaml
).
- S'il-vous-plait ajoutez:
slug: folder-name
type: plugin|theme
- Assurez-vous de mettre à jour vos dépendances. Je recommande de régler Grav sur 1.6 ou 1.7 et de mettre à jour votre code/fournisseur vers PHP 7.1.
dependencies:
- { name: grav, version: '>=1.6.0' }
-
themes
ajoutés aux plans et à la configuration mis en cache. -
Grav 1.7.8 ajoute le support pour définir n'importe quel blueprint dans votre thème. Déplacez tous les fichiers et dossiers de
blueprints/
dansblueprints/pages/
pour que votre thème reste compatible. N'oubliez pas également de mettre à jour la dépendance Grav minimale à> = 1.7.8.
.
Sessions.
- L'ID de session change maintenant lors de la connexion pour éviter les problèmes de fixation de session.
- Ajout de la méthode
Session :: regenerateId()
pour éviter correctement les problèmes de fixation de session.
ACL.
-
user.authorize()
exige maintenant que l'utilisateur soit autorisé (vérification 2FA réussie), à moins que la règle ne contiennelogin
dans son nom. -
Ajout de la prise en charge d'ACL plus avancées (CRUD)
-
BC BREAK
user.authorize()
et Flexobject.isAuthorized()
ont maintenant deux états de refus :false
etnull
..Assurez-vous que vous n'avez pas de contrôles stricts contre false :
$user->authorize($action) === false
(PHP) ouuser.authorize(action) is same as(false)
(Twig).Pour les vérifications négatives, vous devez utiliser
!user->authorize($action)
(PHP) ounot user.authorize(action)
(Twig).Le changement a été fait pour permettre des règles de refus fortes en enchaînant les actions si les précédentes ne correspondent pas :
user.authorize(action1) ?? user.authorize(action2) ?? user.authorize(action3)
.Notez que la fonction Twig
authorize ()
conservera toujours l'ancien comportement !
Pages.
-
Ajout de modèles par défaut pour
external.html.twig
,default.html.twig
etmodular.html.twig
. -
L'administrateur utilise
Flex Pages
par défaut (peut être désactivé à partir du pluginFlex-Objects
).
-
Ajout de la prise en charge des autorisations d'administrateur spécifiques à la page pour les
Flex Pages
. -
Ajout de la prise en charge de la page racine pour les
Flex Pages
. -
Correction des mauvais appels
Pages::dispatch()
(avec redirection) alors que nous voulions vraiment appelerPages::find()
. -
Ajout de la méthode :
Pages::getCollection()
. -
Déplacement de la logique de
collection()
etevaluate()
de la classePage
vers la classePages
. -
OBSOLETE
$page->modular()
en faveur de$page->isModule()
. -
OBSOLETE
PageCollectionInterface::nonModular()
en faveur dePageCollectionInterface::pages()
. -
OBSOLETE
PageCollectionInterface::modular()
en faveur dePageCollectionInterface::modules()
. -
BC BREAK Fixed
Page::modular()
etPage::modularTwig()
retournantnull
pour les dossiers et autres pages non initialisées. Ne devrait pas affecter votre code à moins que vous ne vérifiiez contrefalse
ounull
. -
BC BREAK Toujours utiliser
\Grav\Common\Page\Interfaces\PageInterface
au lieu de\Grav\Common\Page\Page
dans les signatures de méthode. -
L'administrateur utilise désormais les
Flex Pages
par défaut, la collecte se comportera de manière légèrement différente. -
BC BREAK
$page->topParent()
peut renvoyer la page elle-même au lieu denull
. -
*BC BREAK
$page->header()
peut maintenant\Grav\Common\Page\Header
renvoyer un objet au lieu destdClass
, vous devez gérer les deux (Flex vs regular).
Médias.
- Ajout de la méthode
MediaTrait :: freeMedia ()
pour libérer les médias (et la mémoire). - Ajout de la prise en charge du téléchargement et de la suppression d'images directement dans
Media
en utilisant PSR-7. - Types d'actifs ajustés pour permettre l'extension des actifs dans la classe.
- BC BREAK Media n'étend plus les
Getters
, l'accès à$media->$filename
ne fonctionne plus, utilisez plutôt$media[$filename]
!
Markdown.
- BC BREAK Mise à niveau de Parsedown vers 1.7 pour Parsedown-Extra 0.8. Les plugins qui étendent Parsedown peuvent avoir besoin d'un correctif pour s'afficher en HTML.
- Ajout de la nouvelle méthode
Excerpts :: processLinkHtml()
.
Utilisateurs.
- Ajout d'un support expérimental pour
Flex Users
dans le frontend (pas encore recommandé d'utiliser). - L'administrateur utilise
Flex Users
par défaut (peut être désactivé à partir du plug-inFlex-Objects
). Flex Users
améliorés : respectez les plans et autorisez l'utilisation de Flex uniquement en mode administrateur.Flex Users
améliorés : l'ACL des utilisateurs et des groupes prend désormais en charge les autorisations de refus.UserInterface ::authorize()
modifié pour renvoyernull
ayant la même signification quefalse
si l'accès est refusé en raison de l'absence de règle correspondante.- OBSOLETE
\Grav\Common\User\Group
en faveur de$grav['user_groups']
, qui contient la collection Flex UserGroup. - BC BREAK Toujours utiliser `Grav\Common\User\Interfaces\UserInterface
au lieu de
\Grav\Common\User\User` dans les signatures de méthode.
Flex.
- N'utilisez pas directement les classes Flex
Framework
, il est préférable d'utiliser ou d'étendre les classes sous l'espace de nomsGrav\Common\Flex\Types\Generic
. - Ajout de
$grav['flex']
pour accéder à tous les répertoires Flex enregistrés- Ajout
de FlexRegisterEvent
qui se déclenche lorsque$grav['flex']
est accédé pour la première fois.
- Ajout
- Ajout de la méthode
hasFlexFeature()
pour tester siFlexObject
ouFlexCollection
implémente une fonctionnalité donnée. - Ajout de la méthode
getFlexFeatures()
pour renvoyer toutes les fonctionnalités implémentées parFlexObject
ouFlexCollection
. - Ajout de la méthode
FlexObject :: refresh ()
pour s'assurer que l'objet est à jour. - Ajout de
FlexStorage :: getMetaData()
pour obtenir des méta-informations d'objet mises à jour pour les clés répertoriées. - Ajout de l'interface
FlexDirectoryInterface
. - Ajout de l'option de recherche
same_as
aux Flex Objects. - La méthode
Flex Pages $page->header()
renvoie l'objet\Grav\Common\Page\Header
, l'ancienne classePage
renvoie toujoursstdClass
. - Renommé
PageCollectionInterface::nonModular()
enPageCollectionInterface::pages()
et obsolète l'ancienne méthode Renommé PageCollectionInterface::modular() en PageCollectionInterface::modules() et l'ancienne méthode est obsolète. FlexDirectory::getObject()
peut maintenant être appelé sans aucun paramètre pour créer un nouvel objet.- Implémentation d'une configuration personnalisable par type de répertoire flexible.
- OBSOLETE
FlexDirectory::update()
etFlexDirectory::remove()
. - BC BREAK Déplacement de toutes les classes de type
Flex sous Grav\Common\Flex
. - BC BREAK
FlexStorageInterface::getStoragePath()
etgetMediaPath()
peuvent maintenant renvoyernull
. - BC BREAK Les objets Flex ne renvoient plus de clé temporaire s'ils n'en ont pas ; la clé vide est renvoyée à la place.
- BC BREAK Argument de rechargement ajouté à
FlexStorageInterface::getMetaData()
. - Vous pouvez ajouter le fichier
edit_list.html.twig
à un champ de formulaire afin de personnaliser l'apparence dans la vue de la liste.
Multilingue.
- Prise en charge améliorée de la langue pour la classe
Route
. - Traductions : renommer MODULAIRE en MODULE partout.
- Ajout de
Language::getPageExtensions()
pour obtenir la liste complète des extensions de langue de page prises en charge. - BC BREAK Fixed
Language::getFallbackPageExtensions()
pour revenir uniquement à la langue par défaut au lieu de parcourir toutes les langues.
Multi-sites.
- Ajout du support pour avoir tous les sites/environnements sous le dossier
user/env
.
Sérialisation.
- Toutes les classes utilisent maintenant la sérialisation PHP 7.4. Les anciennes méthodes
Serializable
sont désormais définitives et ne peuvent pas être remplacées.
Blueprints.
- Ajout du filtre
flatten_array
pour la validation des champs de formulaire. - Ajout de la prise en charge de
security@: ou : [admin.super, admin.pages]
dans les plans (prise en charge du mode ET/OU imbriqué). - Validation du Blueprint : Ajout de
validate : value_type : bool|int|float|string|trim
toarray
pour filtrer toutes les valeurs à l'intérieur du tableau. - Si vos plugins ont un dossier blueprints, l'initialiser dans l'événement sera trop tard. Faites ceci à la place :
class MyPlugin extends Plugin
{
/** @var array */
public $features = [
'blueprints' => 0, // Use priority 0
];
}
Événements.
- Utilisez
Symfony EventDispatcher
directement au lieu derockettheme/toolbox wrapper
. - Ajout de la méthode
$grav->dispatchEvent()
pour les événements PSR-14. - Ajout de
PluginsLoadedEvent
qui se déclenche après que les plugins ont été chargés mais pas encore initialisés. - Ajout de
SessionStartEvent
qui se déclenche au démarrage de la session. - Ajout de
FlexRegisterEvent
qui se déclenche lorsque$grav['flex']
est accédé pour la première fois. - Ajout de
PermissionsRegisterEvent
qui se déclenche lors du premier accès à$grav['permissions']
. - Ajout de l'événement
onAfterCacheClear
. - Vérifiez l'événement
onAdminTwigTemplatePaths
, il ne doit PAS être :
public function onAdminTwigTemplatePaths($event)
{
// This code breaks all the other plugins in admin, including Flex Objects
$event['paths'] = [__DIR__ . '/admin/themes/grav/templates'];
}
mais:
public function onAdminTwigTemplatePaths($event)
{
// Add plugin template path for admin.
$paths = $event['paths'];
$paths[] = __DIR__ . '/admin/themes/grav/templates';
$event['paths'] = $paths;
}
Javascript.
- Mise à jour de JQuery groupé vers la dernière version
3.5.1
.
Divers.
- Ajout de
Utils ::functionExists()
: compatible avec PHP 8function_exists()
. - Ajout des méthodes d'assistance
Utils::isAssoc()
etUtils::isNegative()
. - Ajout de la méthode
Utils :: simpleTemplate()
pour une modélisation très simple des variables. - Ajout de
Utils ::fullPath()
pour obtenir le chemin complet d'un fichier, qu'il s'agisse d'un flux, d'un relatif, etc. - Prend en charge le remplacement personnalisable des caractères nuls dans
CSVFormatter :: decode ()
. - Ajout de la nouvelle fonction
Security :: sanitizeSVG()
. - Ajout de la méthode
$grav->close()
pour terminer correctement la requête avec une réponse. - Ajout de la méthode
Folder::countChildren()
pour déterminer si un dossier a des dossiers enfants. - Prise en charge des liens symboliques lors de l'enregistrement du fichier.
- Ajout de la méthode
Route :: getBase()
. - BC BREAK Rend les objets
Route
immuables. Cela signifie que vous devez faire :{% set route = route.withExtension('.html') %}
(pour toutes les méthodeswithX
) pour conserver la version mise à jour. - Meilleure gestion de
Content-Encoding
dans Apache lorsque la compression de contenu est désactivée. - Ajout d'une fonction de compatibilité
Uri::getAllHeaders()
. - Autoriser le passage des options
JsonFormatter
sous forme de chaîne.
CLI.
- BC BREAK De nombreux plugins initialisent Grav d'une mauvaise manière, il n'est pas sûr d'initialiser les plugins et le thème par vous-même
- Les appels suivants nécessitent Grav 1.6.21 ou une version ultérieure, il est donc recommandé de définir la dépendance Grav sur cette version
- Dans la méthode
serve()
: - Appelez
$this->setLanguage($langCode)
; avant de faire quoi que ce soit d'autre si vous voulez définir la langue (ou utiliser par défaut). - Appelez l'un des suivants :
$this->initializeGrav()
; Déjà appelé si vous êtes dans bin/plugin, sinon vous devrez peut-être appeler celui-ci :$this->initializePlugins()
; Cela initialise grav, plugins (jusqu'à onPluginsInitialized).$this->initializeThemes()
; Cela initialise grav, plugins et thème.$this->initializePages()
; Cela initialise grav, plugins, thème et tout ce dont les pages ont besoin.
- C'est une bonne idée de préfixer vos classes de commandes CLI avec le nom de votre plugin, sinon il peut y avoir des conflits de noms (nous en avons déjà !).
Bibliothèques utilisées.
- Mise à jour des composants Symfony vers la version 4.4, veuillez mettre à jour toutes les fonctionnalités obsolètes dans votre code.
- BC BREAK Veuillez exécuter
bin/grav yamllinter
pour trouver toute erreur d'analyse YAML sur votre site (y compris vos plugins et thèmes).
PLUGINS.
Administrateur.
- Ajout de l'option
Content Editor
au plan de compte d'utilisateur. - BC BREAK Admin n'initialisera plus les pages frontend, cela a été fait pour accélérer considérablement le plugin Admin.
Veuillez appeler
$grav['admin']->enablePages()
ou{% do admin.enablePages() %}
si vous avez besoin d'accéder aux pages frontales. Cet appel peut être effectué plusieurs fois en toute sécurité. Si vous utilisezFlex Pages
, veuillez utiliser Flex Directory à la place, cela rendra votre code beaucoup plus rapide. - L'administrateur utilise désormais Flex pour modifier
Accounts
etPages
. Si votre plugin s'accroche à l'un de ceux-ci, assurez-vous qu'il fonctionne toujours. - Le cache administrateur est activé par défaut, assurez-vous que votre plugin efface le cache si nécessaire. Veuillez éviter de vider tout le cache !
Noyau de code court.
- OBSOLETE Chaque shortcode doit avoir la méthode
init()
, les classes sans elle cesseront de fonctionner à l'avenir.
Dépannage des problèmes.
ERREUR : modèle flex-objects.html.twig introuvable pour la page
.
Si vous obtenez cette erreur après la mise à niveau vers Grav 1.7, cela peut être lié à un plugin appelé content-edit
. Si vous désactivez ce plugin, l'erreur devrait se résoudre d'elle-même. Grav Numéro #3169
Administrateur non traduit.
Si votre plugin d'administration ressemble à ceci :
La correction est très simple et peut être effectuée même lorsqu'elle n'est pas entièrement traduite. Accédez simplement à PLUGIN_ADMIN.CONFIGURATION
, puis dans PLUGIN_ADMIN.LANGUAGES
, définissez PLUGIN_ADMIN.LANGUAGE_TRANLATIONS
sur PLUGIN_ADMIN.YES
:
Les plans de page cessent de fonctionner dans l'administration.
Si vous ne pouvez pas voir vos champs personnalisés lors de la modification de la page, votre thème utilise deux emplacements en conflit pour les plans de page.
Si le thème n'a pas été créé par vous, veuillez signaler un bogue à l'auteur du thème.
Pour corriger le bogue, vous devez déplacer tous les fichiers et dossiers de votre thème de blueprints/
vers blueprints/pages/
(nécessite Grav 1.7.8+). Sinon, si le thème doit prendre en charge les anciennes versions de Grav, faites l'inverse.
Erreur : boucle détectée lors de l'extension du fichier Blueprint.
La solution la plus simple pour une erreur de boucle consiste à déplacer les fichiers à leur emplacement approprié, veuillez consulter le problème ci-dessus.
Vous pouvez également résoudre le problème en modifiant le plan de la page cassée à partir de :
extends@:
type: [NAME]
context: 'blueprints://pages'
où [NAME
] est le nom de fichier (sans l'extension de fichier) du plan lui-même, pour :
extends@: self@
Style CSS manquant dans l'administration.
Il a été signalé qu'après la mise à niveau vers les derniers Grav 1.7 et Admin 1.10, certaines pages d'administration semblent cassées et pas entièrement stylées. Cela pourrait être lié au plugin imagecreate
. Désactiver ce plugin ne suffit pas, vous devez supprimer complètement le plugin, puis l'erreur devrait se résoudre d'elle-même. Problème d'administration #2035
Revenir à Grav 1.6.
Bien que nous vous recommandons de résoudre tous les problèmes que vous pourriez avoir pour vous assurer que Grav 1.7 et les futures mises à jour seront une mise à niveau facile, il y aura des scénarios où vous avez une fonctionnalité de plug-in personnalisée, ou n'avez pas les ressources de développement à portée de main, et avez juste besoin de revenir rapidement à Grav 1.6.
Si vous avez un accès CLI au site, cela peut être fait en exécutant ces commandes à partir de la racine de votre site Grav 1.7 :
wget -q https://getgrav.org/download/core/grav-update/1.6.31 -O tmp/grav-update-v1.6.31.zip
wget -q https://getgrav.org/download/plugins/admin/1.9.19 -O tmp/grav-plugin-admin-v1.9.19.zip
unzip tmp/grav-update-v1.6.31.zip -d tmp
unzip tmp/grav-plugin-admin-v1.9.19.zip -d tmp
cp -rf tmp/getgrav-grav-plugin-admin-5d86394/* user/plugins/admin/
cp -rf tmp/grav-update/* ./
Fondamentalement, il effectue une installation directe de la dernière version de Grav 1.6 et Admin 1.9 en plus de votre installation actuelle. Il ne touche pas le dossier user/
afin que votre contenu et vos plugins ne soient pas impactés.
Pour ceux qui n'ont pas accès à la CLI, téléchargez les fichiers grav-update-v1.6.31.zip et grav-plugin-admin-1.9.19.zip en utilisant les liens donnés ici. Décompressez les fichiers dans votre système de fichiers. Utilisez ensuite votre client FTP/SFTP préféré pour copier tous les fichiers Grav dans vos fichiers WEBROOT
et Admin dans WEBROOT/user/plugins/admin
.