CakePHP 4.2 est une mise à jour de l’API compatible à partir de la version 4.0. Cette page présente les dépréciations et fonctionnalités ajoutées dans la version 4.2.
Vous pouvez utiliser composer pour mettre à jour vers CakePHP 4.2.0:
php composer.phar require --update-with-dependencies "cakephp/cakephp:4.2.x"
4.2 introduit quelques dépréciations. Toutes ces fonctionnalités continueront d’exister dans les versions 4.x mais seront supprimées dans la version 5.0. Vous pouvez utiliser l”outil de mise à niveau pour automatiser la mise à jour des fonctionnalités obsolètes:
bin/cake upgrade rector --rules cakephp42 <path/to/app/src>
Note
Cela ne met à jour que les changements de CakePHP 4.2. Assurez-vous d’appliquer d’abord les modifications de CakePHP 4.1.
Une nouvelle option de configuration a été ajoutée pour désactiver les dépéréciations chemin par chemin. Cf. Avertissements de dépréciation pour plus d’informations.
L”Exception::responseHeader()
est maintenant dépréciée. Les utilisateurs
doivent utiliser HttpException::setHeaders()
pour définir les en-têtes de
la réponse HTTP. Les exceptions d’applications et de plugins qui définissent
des en-têtes de réponse devraient être mises à jour pour hériter de
HttpException
.
Cake\Core\Exception\Exception
a été renommée en
Cake\Core\Exception\CakeException
.
Cake\Database\Exception
a été renommée en
Cake\Database\Exception\DatabaseException
.
TableLocator::allowFallbackClass()
a été ajoutée. Cette méthode vous
permet de désactiver les classes de table fallback générées automatiquement.
La désactivation est actuellement une option, mais deviendra à l’avenir le
comportement par défaut.
ORM\Behavior::getTable()
a été dépréciée. Utilisez table()
à la place.
Ce changement marque une différence des noms de méthodes par rapport à
ORM\Table
, car les valeurs de retour de ces méthodes sont différentes.
Bien que les changements qui suivent ne modifient pas la signature des méthodes, ils changent la signification ou le comportement des méthodes.
Collection::groupBy()
et Collection::indexBy()
lèvent maintenant une
exception quand le chemin n’existe pas ou quand le chemin contient une valeur
null. Les utilisateurs qui ont besoin de null devraient utiliser un callback
pour renvoyer plutôt une valeur par défaut.
Controller::$components
a été marquée protected. Elle était auparavant
documentée comme protected. Cela ne devrait pas impacter la plupart des codes
d’application puisque les implémentations peuvent augmenter la visibilité à
public.
FlashComponent::set()
définit maintenant l’option element
à error
par défaut quand elle est utilisée avec une instance Exception
.
Le TimeType
sérialisera désormais correctement les valeurs dans le format
H:i
. Auparavant ces valeurs étaient castées en null
après validation.
Le pilote Sqlserver
réessayera de se connecter après une erreur
« Azure Sql Database paused ».
ExceptionRenderer
utilise maintenant le code de l’exception comme statut
HTTP uniquement pour HttpException
. Les autres exceptions qui sont
censées renvoyer un code HTTP différent de 500 sont contrôlées par
ExceptionRenderer::$exceptionHttpCodes
.
Note
Si vous avez besoin de restaurer le comportement précédent jusqu’à ce que
vos exceptions soient mises à jour, vous pouvez créer un ExceptionRenderer
personnalisé et réécrire la function getHttpCode()
.
Cf. ExceptionRenderer personnalisé pour plus d’informations.
ConsoleErrorHandler
utilise désormais le code de l’exception comme code de
sortie uniquement pour ConsoleException
.
Validation::time()
rejettera désormais une chaîne de texte s’il manque les
minutes. Auparavant, elle acceptait des chiffres correspondant uniquement aux
heures alors que la documentation de l’API disait que les minutes étaient
exigées.
Derrière l’API, certains changements sont nécessaires pour avancer. Ils n’affectent généralement pas les tests.
La dépendance envers le paquet
Aura.Intl a été supprimée car il n’est
plus maintenu. Si votre application/plugin a des traducteurs génériques
(custom translation loaders) alors elle
doit retourner désormais une instance Cake\I18n\Package
à la place de
Aura\Intl\Package
. Les deux classes ont des API compatibles donc vous
n’avez rien besoin de changer d’autre.
Les noms de fixtures autour des UUIDs ont été consolidés
(UuidItemsFixture
, BinaryUuidItemsFixture
). Si vous utilisez l’une
d’entre elles, assurez-vous d’avoir mis à jour ces noms.
La UuidportfoliosFixture
n’était pas utilisée dans le cœur et a maintenant
été retirée.
Nous sommes en train de mettre en place un nouveau process pour nous permettre de lancer de nouvelles fonctionnalités, de recevoir des feedbacks de la communauté et de faire évoluer ces fonctionnalités. Nous appelons ce process experimental-features.
Un support expérimental pour un Injection de Dépendance a été ajouté.
ConsoleIo::comment()
a été ajouté. Cette méthode formate le texte en bleu
comme des commentaires dans le texte d’aide généré.
TableHelper
supporte maintenant un tag de formatage <text-right>
, qui
aligne le contenu de la cellule par rapport au côté droit plutôt que le
gauche.
SqlServer
crée maintenant par défaut des curseurs en tampon côté client
pour les requêtes préparées. Cela a été modifié pour résoudre des problèmes de
performance significatifs avec les curseurs SCROLL côté serveur. Les
utilisateurs devraient constater des performances boostées pour la plupart des
results sets.
Avertissement
Pour les utilisateurs qui ont des requêtes avec de grands résultats, cela
peut causer une erreur d’allocation du tampon côté client, si
Query::disableBufferedResults()
n’est pas invoquée.
La taille maximum du tampon peut être configurée dans php.ini
avec
pdo_sqlsrv.client_buffer_max_kb_size
.
Cf. https://docs.microsoft.com/en-us/sql/connect/php/cursor-types-pdo-sqlsrv-driver?view=sql-server-ver15#pdo_sqlsrv-and-client-side-cursors
pour plus d’informations.
Query::isResultsCastingEnabled()
a été ajoutée pour obtenir le mode actuel
de cast du résultat en cours.
StringExpression
a été ajoutée pour utiliser des string literals avec
collation.
IdentifierExpression
support maintenant la collation.
Cake\Http\Middleware\SessionCsrfProtectionMiddleware
a été ajouté. Plutôt
que de stocker les jetons CSRF dans un cookie, ce middleware stocke les jetons
en session. Cela limite la portée des jetons CSRF à l’utilisateur et les
relie à l’heure de la session, offrant une sécurité accrue par rapport aux
jetons basés sur des cookies. Ce middleware est un substitut à
CsrfProtectionMiddleware
.
Les types hal+json
, hal+xml
, et jsonld
ont été ajoutés à
Response
, les rendant utilisables avec withType()
.
Client::createFromUrl()
a été ajoutée. Cette méthode peut être utilisée
pour créer des clients HTTP limités à des domaines incluant une base d’adresse
spécifique.
Une nouvelle classe utilitaire Cake\Http\FlashMessage
a été ajoutée, dont
l’instance est disponible par ServerRequest::getFlash()
. La classe
similaire à FlashComponent
vous permet de définir des messages flash. Elle
peut être particulièrement utile pour définir des messages flash depuis les
middlewares.
Table::subquery()
et Query::subquery()
ont été ajoutées. Ces méthodes
vous permettent de créer des objets qui n’ont pas d’aliasing automatique. Cela
aide à réduire l’empilement et la complexité de la construction de
sous-requêtes et d’expressions de tables communes.
La règle IsUnique
accepte maintenant l’option allowMultipleNulls
qui
était disponible dans la version 3.x. Elle est désactivée par défaut,
contrairement à ce qui se faisait dans la version 3.x.
EmailTrait::assertMailSubjectContains()
et
assertMailSubjectContainsAt()
ont été ajoutées.
mockService()
a été ajoutée à ConsoleIntegrationTestTrait
et
IntegrationTestCaseTrait
. Cette méthode permet de remplacerr les services
injectés avec le conteneur d”Injection de Dépendance par des
Mocks ou des stubs.
Les classes de contexte incluent maintenant les options de métadonnées
comment
, null
, and default
dans les résultats de attributes()
.
ViewBuilder::addHelper()
accepte maintenant un paramètre $options
pour
passer des options dans le constructeur de l’Helper.
L’option assetUrlClassName
a été ajoutée à UrlHelper
. Cette option
vous permet de remplacer l’asset URL resolver par défaut par un autre qui soit
spécifique à l’application.
Cela peut être utile si vous avez besoin de personnaliser les paramètres de
l’asset cache busting.