CakePHP 2.2 est une mise à jour de l’API complètement compatible à partir de 2.0/2.1. Cette page souligne les changements et améliorations faits dans 2.2.
Quand on met à jour vers CakePHP 2.2, il est important d’ajouter quelques
nouvelles valeurs de configuration dans app/Config/bootstrap.php
.
Les ajoutez va assurer que le behavior soit cohérent avec 2.1.x:
// Active les filtres du Dispatcher pour les assets du plugin, et
// du CacheHelper.
Configure::write('Dispatcher.filters', array(
'AssetDispatcher',
'CacheDispatcher'
));
// Ajouter la configuration logging.
CakeLog::config('debug', array(
'engine' => 'FileLog',
'types' => array('notice', 'info', 'debug'),
'file' => 'debug',
));
CakeLog::config('error', array(
'engine' => 'FileLog',
'types' => array('warning', 'error', 'critical', 'alert', 'emergency'),
'file' => 'error',
));
Vous devrez aussi modifier app/Config/core.php
. Changez la valeur de
LOG_ERROR
en LOG_ERR
:
define('LOG_ERROR', LOG_ERR);
Quand on utilise Model::validateAssociated()
ou Model::saveAssociated()
et les échecs de validation du model principal, les erreurs de validation des
models associés ne sont plus détruites. Model::$validationErrors
va
maintenant toujours montrer toutes les erreurs.
Vous aurez peut-être besoin de mettre à jour vos cas de test pour prendre en
compte ce changement.
Une option a été ajoutée pour écraser les fichiers POT existant par défaut:
./Console/cake i18n extract --overwrite
Model::_findCount()
va maintenant appeler les méthodes find
personnalisées avec $state = 'before'
et
$queryData['operation'] = 'count'
. Dans certains cas, les finds
personnalisés retournent toujours le bon compte pour la pagination, mais
la clé 'operation'
permet plus de flexibilité pour construire les autres
requêtes, ou de supprimer les joins qui sont requis pour le finder
personnnalisé lui-même. Puisque la pagination de méthodes find
personnalisées ne fonctionne presque jamais, il y a besoin ce workarounds
pour cela dans le niveau de model, qui ne sont plus necéssaires.
Les sources de données Dbo supportent maintenant les transactions réelles
imbriquées. Si vous avez besoin d’utiliser cette fonctionnalité dans votre
application, activez la en utilisant
ConnectionManager::getDataSource('default')->useNestedTransactions = true;
Le webrunner inclut maintenant des liens pour re-lancer un test avec la sortie en debug.
Les cas de test générés pour Controller sont maintenant des sous-classes de
ControllerTestCase
.
Quand les exceptions se répétent, ou que les exceptions sont levées quand on
rend les pages d’erreur, le nouveau layout error
sera utilisé. Il est
recommandé de ne pas utiliser de helpers supplémentaires dans ce layout
puisque il est là pour les erreurs de niveau développeur seulement. Cela
règle les problèmes des erreurs fatales dans le rendu des pages d’erreur dû
à l’utilisation du helper dans le layout default
.
Il est important de copier app/View/Layouts/error.ctp
dans votre
répertoire. Ne pas le faire ainsi mettra en échec le rendu des pages erreurs.
Vous pouvez maintenant configurer la gestion d’erreur en console spécifique.
En configurant Error.consoleHandler
, et Exception.consoleHandler
vous
pouvez définir le callback qui va gérer les errors/exceptions levées dans les
applications en console.
Le gestionnaire configuré dans Error.handler
et Error.consoleHandler
va recevoir des codes d’erreur fatal (par ex:
E_ERROR
, E_PARSE
, E_USER_ERROR
).
NotImplementedException
a été ajouté.
Configure::dump()
a été ajoutée. Elle est utilisée pour
rendre les données de configuration persistentes dans des stockages
durables comme des fichiers. Les deux PhpReader
et
IniReader
fonctionnent avec elle.
Un nouveau paramètre de config “Config.timezone” est disponible que
vous pouvez définir comme une chaîne de timezone d’utilisateur. Par ex,
vous pouvez faire Configure::write('Config.timezone',
'Europe/Paris')
. Si une méthode de la classe CakeTime
est appelée avec
le paramètre $timezone
à null et “Config.timezone” est défini, alors
la valeur de “Config.timezone” sera utilisée. Cette fonctionnalité vous
permet de définir le timezone d’utilisateur juste une fois au lieu de
le passer chaque fois dans les appels de fonction.
Les options pour les adapters définies dans
AuthComponent::$authenticate
accèptent maintenant une option
contain
. Ceci est utilisé pour définir des options de contenance pour
le cas où les enregistrements de l’utilisateur sont chargés.
Paginer les finders personnalisés va maintenant retourner des comptes corrects, vois les changements de Model pour plus d’informations.
CakeEmail::charset()
et CakeEmail::headerCharset()
ont été ajoutés.
Les encodages Japonnais légaux sont maintenant gérés correctement.
ISO-2202-JP
est utilisé lorsque l’encodage est ISO-2202-JP-MS
qui fonctionne autour d’un nombre de questions dans les mail clients
quand il s’agit des encodages CP932 et Shift_JIS.
CakeEmail::theme()
a été ajoutée.
CakeEmail::domain()
a été ajoutée. Vous pouvez utiliser cette
méthode pour définir le nom de domaine utilisé lors de l’envoi de mail à
partir d’un script CLI ou si vous voulez contrôler le nom d’hôte utilisé
pour envoyer l’email.
Vous pouvez maintenant définir theme
et helpers
dans votre
classe EmailConfig.
CakeRequest va maintenant automatiquement décoder les corps de requête
application/x-www-form-urlencoded
sur les requêtes PUT
et DELETE
.
Ces données seront disponibles dans $this->data
exactement comme les
données POST le sont.
La classe Hash
a été ajoutée dans 2.2. Elle remplace Set en
fournissant une API plus cohérente, fiable et performante pour faire
plusieurs des tâches que fait Set. Regardez la page
Hash pour plus de détails.
Le paramètre $userOffset
a été remplacé par le paramètre $timezone
dans toutes les fonctions pertinentes. Donc au lieu de la sortie numérique,
vous pouvez maintenant passer une chaîne timezone ou un objet DateTimeZone.
Passer les sorties numériques pour le paramètre $timezone
est toujours
possible pour une compatibilité rétro-active.
CakeTime::timeAgoInWords()
a l’option accuracy
ajoutée.
Cette option vous permet de spécifier la précision que doivent avoir les
times formatés.
Nouvelles méthodes ajoutées:
Le paramètre $dateString
dans toutes les méthodes accèptent maintenant
un objet DateTime.
FormHelper gère maintenant mieux l’ajout des classes requises aux entrées.
Il honore maintenant la clé on
.
FormHelper::radio()
supporte maintenant empty
qui fonctionne
de la même façon que l’option empty de select()
.
Ajout de FormHelper::inputDefaults()
pour définir les propriétés
habituelles pour chacune de ses entrées générées par le Helper.
Depuis 2.1, TimeHelper utilise la classe CakeTime pour toutes ses méthodes
pertinentes. Le paramètre $userOffset
a été remplacé par le paramètre
$timezone
.
TimeHelper::timeAgoInWords()
a l’option element
ajoutée.
Cela vous permet de spécifier un élément HTML pour entourer le time
formaté.
HtmlHelper::tableHeaders()
supporte maintenant la configuration
des attributs par cellule de table.
Les écouteurs d’Event peuvent maintenant être attachés aux appels du dispatcher, ceux-ci vont avoir la capacité de changer l’information de requête ou la réponse avant qu’elle soit envoyée au client. Vérifiez la documentation complète pour ces nouvelles fonctionnalités dans Filtres du Dispatcher
Avec l’ajout de Filtres du Dispatcher vous aurez besoin de
mettre à jour app/Config/bootstrap.php
. Regardez
Etapes requises pour mettre à jour.
Router::setExtensions()
a été ajoutée. Avec la nouvelle méthode,
vous pouvez maintenant ajouter plus d’extensions à parser, par exemple dans
un fichier de routes de plugin.
Un nouveau moteur de cache a été ajouté en utilisant phpredis extension il est configuré de la même manière que le moteur Memcache.
Il est maintenant possible de tagger ou de labeliser les clés de cache sous les groupes. Cela facilite pour supprimer en masse les entrées associées mise en cache avec le même label. Les groupes sont déclarés au moment de la configuration quand on crée le moteur de cache:
Cache::config(array(
'engine' => 'Redis',
...
'groups' => array('post', 'comment', 'user')
));
Vous pouvez avoir autant de groupes que vous le souhaitez, mais gardez à l’esprit qu’ils ne peuvent pas être modifiés dynamiquement.
La méthode de la classe Cache::clearGroup()
a été ajoutée. Elle
prende le nom du groupe et supprime toutes les entrées labelisées avec la
même chaîne.
Les changements dans CakeLog
requièrent maintenant une
configuration supplémentaire dans votre app/Config/bootstrap.php
.
Regardez Etapes requises pour mettre à jour,
et Journalisation (logging).
La classe CakeLog
accèpte maintenant les mêmes niveaux de log
que défini dans
RFC 5424. Plusieurs méthodes
pratiques ont été aussi ajoutées:
CakeLog::emergency($message, $scope = array())
CakeLog::alert($message, $scope = array())
CakeLog::critical($message, $scope = array())
CakeLog::error($message, $scope = array())
CakeLog::warning($message, $scope = array())
CakeLog::notice($message, $scope = array())
CakeLog::info($message, $scope = array())
CakeLog::debug($message, $scope = array())
Un troisième argument $scope
a été ajouté à CakeLog::write
.
Regardez Scopes de journalisation.
Un nouveau moteur de log: ConsoleLog
a été ajouté.
Un nouvel objet ModelValidator
a été ajouté pour déléguer le travail
de validation des données du model, il est normalement transparent pour
l’application et complètement rétro-compatible. Il fournit aussi une API
riche pour ajouter, modifier et retirer les règles de validation. Vérifiez
les docs pour cet objet dans Validation des Données.
Les fonctions de validation dans vos models devront avoir la visibilité
« public » afin d’être accessibles par ModelValidator
.
De nouvelles règles de validation ont été ajoutées: