CakePHP 3.1 est une mise à jour de CakePHP 3.0 dont la compatibilité API est complète. Cette page souligne les changements et améliorations faits dans 3.1.
La classe de route par défaut a été changée en DashedRoute
dans le dépôt
cakephp/app
. Votre base de code actuelle n’est pas affectée par ceci mais
il est recommandé d’utiliser cette classe de route à partir de maintenant.
Les options de nom de préfixe ont été ajoutées aux différentes méthodes de construction de route. Regardez la section Utiliser les Routes Nommées pour plus d’informations.
Shell::dispatchShell()
n’affiche plus le message d’accueil à partir du
shell dispatché.
La fonction breakpoint()
a été ajoutée. Cette fonction fournit un snippet
de code qui peut être utilisé dans un eval()
pour lancer une console
interactive. C’est très utile pour debugger les tests ou tout script CLI.
Les options de console --verbose
et --quiet
controllent maintenant
les niveaux de log de stdout/stderr.
Les applications de console peuvent maintenant créer des classes Helper qui encapsulent des blocs réutilisables de logique de sortie. Consultez la section sur Shell Helpers pour plus d’informations.
RoutesShell a été ajouté et vous fournit maintenant un moyen simple pour utiliser l’interface CLI pour tester et débugger les routes. Consultez la section Shell Routes pour plus d’informations.
Les propriétés de Controller suivantes sont maintenant dépréciées:
layout
view - remplacée par template
theme
autoLayout
viewPath - remplacée par templatePath
viewClass - remplacée par className
layoutPath
Au lieu de définir ces propriétés dans vos controllers, vous devrez les définir dans votre View en utlisant des méthodes de même nom:
// Dans un controller au lieu de
$this->layout = 'advanced'
// Vous devez utiliser
$this->viewBuilder()->layout('advanced');
Ces méthodes doivent être appelées après que vous ayez déterminé quelle classe de View sera utilisée par le controller/action.
Une nouvelle option de configuration storage
a été ajoutée. Elle contient
le nom de la classe de stockage que AuthComponent
utilise pour stocker
l’enregistrement de l’utilisateur. Par défaut SessionStorage
est utilisée.
Si vous utilisez un authentificateur stateless, vous devez configurer
AuthComponent
avec MemoryStorage
à la place.
Une nouvelle option de config checkAuthIn
a été ajoutée. Elle contient
le nom de l’event pour lequel les vérifications d’auth doivent être faites.
Par défaut Controller.startup
est utilisé, mais vous pouvez la définir
dans Controller.initialize
si vous souhaitez que l’authentification
soit vérifiée avant que la méthode beforeFilter()
de votre controller ne
soit executée.
Les options scope
et contain
de la classe d’authentification sont
dépréciées. A la place, utilisez la nouvelle option finder
pour configurer
une méthode de finder personnalisée pour modifier le requête utilisée pour
chercher l’utilisateur.
La logique responsable de définir la variable de session Auth.redirect
,
qui est utilisée pour récupérer l’URL de redirection après la connexion
(login) a été modifiée. Elle est maintenant définie uniquement lorsque l’on
essaye d’accéder directement à une URL protégée sans authentification. Ainsi
Auth::redirectUrl()
renvoie l’URL protégée après le login. Dans la
plupart des cas, lorsqu’un utilisateur accède directement à la page de
connexion, Auth::redirectUrl()
renvoie la valeur définie par la
configuration de loginRedirect
.
FlashComponent
empile maintenant les messages enregistrés avec les
méthodes set()
et __call()
. Cela signifie que la structure des
données stockées dans la Session pour les messages Flash a changé.
Le temps d’expiration du cookie CSRF peut maintenant être défini en une
valeur compatible avec strtotime()
.
Les tokens CSRF invalides vont maintenant lancer une
Cake\Network\Exception\InvalidCsrfTokenException
plutôt qu’une
Cake\Network\Exception\ForbiddenException
.
RequestHandlerComponent
échange maintenant le layout et le template selon
l’extension parsée ou l’en-tête Accept
dans le callback
beforeRender()
plutôt que dans startup()
.
addInputType()
et viewClassMap()
sont dépréciées. Vous devez utiliser
config()
pour modifier ces données de configuration à la volée.
Quand inputTypeMap
ou viewClassMap
sont définies dans les
configurations du component, elles vont surcharger les valeurs par défaut.
Ce changement rend possible la suppression de la configuration par défaut.
Le type mime utilisé pour envoyer les requêtes par défaut a changé.
Précédemment, multipart/form-data
était toujours utilisé. Dans 3.1,
multipart/form-data
n’est utilisé qu’en cas de transfert de fichiers.
Lorsqu’il n’y en pas, application/x-www-form-urlencoded
est utilisé à la
place.
Vous pouvez maintenant Charger en Eager des Associations. Cette fonctionnalité vous permet de charger des associations conditionnellement dans un ensemble de résultats, une entity ou une collection d’entites.
Les méthodes patchEntity()
et newEntity()
supportent maintenant
l’option onlyIds
. Cette option vous permet de restreindre la conversion des
données des associations hasMany/belongsToMany pour utiliser uniquement la liste
des _ids
. Cette option est par défaut à false
.
Query::notMatching()
a été ajoutée.
Query::leftJoinWith()
a été ajoutée.
Query::innerJoinWith()
a été ajoutée.
Query::select()
supporte maintenant des objets Table
et Association
en paramètres. Ces types de paramètres sélectionneront toutes les colonnes de
l’instance de la table ou la table ciblée par l’association.
Query::distinct()
accepte maintenant une chaine de caractères pour les distinct sur
une seule colonne.
Table::loadInto()
a été ajoutée.
Les fonctions SQL brutes EXTRACT
, DATE_ADD
et DAYOFWEEK
ont
été ajoutées avec extract()
, dateAdd()
et dayOfWeek()
.
Vous pouvez maintenant définir _serialized
à true
pour JsonView
et XmlView
pour sérialiser toutes les variables de vue au lieu de les
spécifier explicitement.
View::$viewPath
est déprécié. Vous devez utilisez View::templatePath()
à la place.
View::$view
est déprécié. Vous devez utilisez View::template()
à la place.
View::TYPE_VIEW
est déprécié. Vous devez utilisez View::TYPE_TEMPLATE
à la place.
SessionHelper
a été dépréciée. Vous pouvez directement utiliser
$this->request->session()
.
FlashHelper
peut maintenant rendre plusieurs messages si plusieurs
messages ont été enregistrés avec le FlashComponent
. Chaque message
sera rendu dans son propre élément. Les messages seront rendus dans l’ordre
dans lequel ils ont été enregistrés.
Une nouvelle option templateVars
a été ajoutée. templateVars
vous
permet de passer des variables supplémentaires à vos templates de formulaire
personnalisés.
Les classes Email
et Transport
ont été déplacées sous le namespace
Cake\Mailer
. Leur ancien namespace est toujours utilisable car des alias
ont été créés.
Le profil d’email default
est maintenant automatiquement défini quand une
instance Email
est créée. Ce comportement est le même que dans 2.x.
La classe Mailer
a été ajoutée. Cette classe aide à créer des emails
réutilisables dans une application.
Time::fromNow()
a été ajoutée. Cette méthode facilite le calcul de
différence depuis l’instant présent.
Time::i18nFormat()
supporte les calendriers non-grégorien lors du
formatage des dates.
Validation::geoCoordinate()
a été ajoutée.
Validation::latitude()
a été ajoutée.
Validation::longitude()
a été ajoutée.
Validation::isInteger()
a été ajoutée.
Validation::ascii()
a été ajoutée.
Validation::utf8()
a été ajoutée.
La clé model
est maintenant supportée pour récupérer le nom de la table pour
l’import.