Le processus de construction du modèle a été allegé. Les associations des Modèles sont maintenant en lazy loaded, les applications avec beaucoup de modèles et d’associations vont voir une grande réduction de temps dans le processus de bootstrap.
Les modèles ne requièrent maintenant plus de connexion à la base de données dans le processus de construction. La base de données ne sera accédée pour la première fois seulement quand une opération de recherche est délivrée ou une information pour une des colonnes est requise.
View n’aura pas toujours le dernier rendu de contenu (view ou layout)
accessible avec $this->output
. Dans les helpers, vous pouvez utiliser
$this->_View->output
. Modifier cette propriété changera le contenu
qui sort de la vue rendue.
getCrumbList()
Créé un fil d’ariane de liens entourés d’éléments <li>
.
loadConfig()
a été déplacé de Helper
vers la classe
HtmlHelper
. Cette méthode utilise maintenant les nouvelles
classes de lecture (voir 2.0 Configure
)
pour charger votre fichier de config. En option vous pouvez passer le chemin
en deuxième paramètre (app/Config
par défaut). Pour simplifier, vous
pouvez définir le fichier de configuration (et le lecteur) dans
Controller::$helpers
(exemple ci-dessous) pour charger le constructeur
du helper. Dans le fichier de configuration, vous pouvez définir les clés
ci-dessous:
tags
Doit être un tableau avec une valeur clé;
minimizedAttributes
Doit être une liste;
docTypes
Doit être un tableau avec une valeur clé;
attributeFormat
Doit être une chaîne de caractère;
minimizedAttributeFormat
Doit être une chaîne de caractère.
Exemple sur la façon de définir le fichier de configuration sur les contrôleurs:
public $helpers = array(
'Html' => array(
'configFile' => array('config_file', 'php') // Option une: un tableau avec le nom du fichier et le nom de lecture
'configFile' => 'config_file' // Option deux: une chaîne de caractère avec le nom du fichier. Le PhpReader sera utilisé
)
);
FormHelper
supporte maintenant tout type d’entrée HTML5 et
tout type d’entrée personnalisé. Utilisez simplement le type d’entrée
que vous souhaitez en méthode sur le helper. Par exemple range()
créera une entrée avec type = range.
postLink()
et postButton()
Crée un lien/bouton permettant d’accéder
à certaine pasge utilisant la méthode HTTP POST. Avec ceci dans votre
controller vous pouvez empêcher certaines actions, comme delete, d’être
accédées par la méthode GET.
select()
avec multiple = checkbox, traite maintenant l’attribut 'id'
en préfixe pour toutes les options générées.
CakeRequest
est une nouvelle classe introduite dans 2.0. Elle
encapsule les méthodes d’introspection de requêtes utilisées couramment et
remplace le tableau params avec un objet plus utile. Lisez en plus sur
CakeRequest
.
CakeResponse
est une nouvelle classe introduite dans 2.0. Elle
encapsule les méthodes et propriétés utilisées couramment dans la réponse HTTP
que votre application génère. Elle consolide plusieurs caractéristiques dans
CakePHP. Lisez en plus sur CakeResponse
.
CakeSession
et le SessionComponent
ont connu un
nombre de changements, regardez la section session pour plus d’informations.
Les Objets Route peuvent maintenant retourner des URLs complètes, et
Router
ne les modifiera plus au-delà de l’ajout de la
chaîne de requête et des éléments de fragments. Par exemple, ceci
pouvait être utilisé pour créer des routes pour la gestion de
sous-domaines, ou pour l’activation de flags https/http. Un exemple
de classe de route qui supporte les sous-domaines serait:
class SubdomainRoute extends CakeRoute {
public function match ($params) {
$subdomain = isset($params['subdomain']) ? $params['subdomain'] : null;
unset($params['subdomain']);
$path = parent::match($params);
if ($subdomain) {
$path = 'http://' . $subdomain . '.localhost' . $path;
}
return $path;
}
}
Quand vous créez des liens, vous pouvez faire ce qui suit pour faire pointer les liens vers d’autres sous-domaines.
echo $this->Html->link(
'Autre domaine',
array('subdomain' => 'test', 'controller' => 'posts', 'action' => 'add')
);
Ce qui est ci-dessus créera un lien avec l’url http://test.localhost/posts/add.
Xml
a connu un certain nombre de changements. Lisez en plus sur la
classe Xml.
Configure
peut maintenant être configuré pour le chargement de
fichiers à partir d’une variété de sources et de formats. La section
Configuration contient plus d’informations sur les
changements faits à configure.
Configure::read()
sans autre argument vous permet de lire
toutes les valeurs de configure, plutôt que uniquement la valeur du debug.
CakePHP 2.0 a reconstruit la gestion des Exceptions et des Gestion des Erreurs, pour être plus flexible et donner plus de puissance aux développeurs.
String::wrap()
a été ajouté pour faciliter les formatages de
largeur fixe des textes. Il est utilisé dans les Shells quand vous utilisez
Shell::wrapText()
.
debug()
ne sort plus de HTML dans la console. A la place, elle
donne des sorties comme ce qui suit:
########## DEBUG ##########
Array
(
[0] => test
)
###########################
Ceci devrait améliorer la lecture de debug()
dans les lignes de commande.
Components reçoit un traitement identique aux helpers et aux behaviors,
Component
est maintenant la classe de base pour les components.
Lisez en plus sur les changements sur les components.
RequestHandler
a été fortement remaniée du fait de l’introduction
de CakeRequest
. Ces changements permettent à certaines nouvelles
fonctionnalités d’être aussi introduites.
Si un client envoie un unique mime type Accept qui correspond à l’une des
extensions activées dans :php:class`Router`, RequestHandler
le traitera de la même façon qu’une extension. Cela étendra le support de
CakePHP pour les terminaux de type REST. Pour utiliser cette fonctionnalité,
commencez par activer les extensions dans app/Config/routes.php
Router::parseExtensions('json', 'xml');
Une fois que vous avez créé les layouts et les vues pour vos extensions, vous
pourrez visiter une url comme posts/view/1 et envoyer Accept:
application/json
dans les headers pour recevoir la version JSON de cette
URL.
CakePHP a une protection CSRF depuis 1.2. Pour 2.0, le CSRF existant a un nouveau mode plus paranoïaque, et est sa caractéristique propre autonome. Dans le passé, les fonctionnalités CSRF étaient couplées avec des gardes-fous de tampering de formulaires. Les développeurs désactivent souvent validatePost pour faire des formulaires dynamiques, en désactivant la protection CSRF en même temps. Pour 2.0, la vérification CSRF a été séparée du tampering des formulaires vous donnant plus de contrôle.
Pour plus d’informations, regardez protection CSRF
Les Controllers ont maintenant accès aux objets request et response. Vous pouvez en lire plus sur ces objets sur leurs pages spécifiques.
La console pour CakePHP 2.0 a été preque entièrement reconstruite. De nombreuses nouvelles caractéristiques ainsi que quelques changements incompatibles avec antérieurement. Lisez en plus sur les changements sur la console.
Pagination fournit maintenant un maxLimit par défaut à 100 pour la pagination.
Cette limite peut maintenant être dépassée avec la variable paginate dans le Controller.
$this->paginate = array('maxLimit' => 1000);
Cette valeur par défaut est fournie pour empêcher l’utilisateur de manipuler les URL provoquant une pression excessive sur la base de données pour les requêtes suivantes, où un utilisateur modifierait le paramètre “limit” pour une nombre très important.
Vous pouvez maintenant mettre un alias les helpers, les components et les
behaviors pour utiliser votre classe plutôt qu’une autre. Cela signifie que
vous pouvez très facilement faire un helper MyHtml
et n’avez pas besoin
de remplacer chaque instance de $this->Html
dans vos vues. Pour le faire,
passez la clé “className” tout au long de votre classe, comme vous feriez avec
les modèles.
public $helpers = array(
'Html' => array(
'className' => 'MyHtml'
)
);
De même, vous pouvez mettre en alias les components pour l’utilisation dans vos controllers.
public $components = array(
'Email' => array(
'className' => 'QueueEmailer'
)
);
Appeller le component Email appelle le component QueueEmailer à la place. Finalement, vous pouvez aussi mettre en alias les behaviors.
public $actsAs = array(
'Containable' => array(
'className' => 'SuperContainable'
)
);
Du fait de la façon dont 2.0 utilise les collections et les partage dans toute l’application, toute classe que vous mettez en alias sera utilisée dans toute votre application. Quelque soit le moment où votre application essaie d’accéder à l’alias, elle aura accès à votre classe. Par exemple, quand vous mettez en alias le helper Html dans l’exemple ci-dessus, tous les helpers qui utilisent le helper Html ou les éléments qui chargent le helper Html, utiliseront MyHtml à la place.
Une nouvelle méthode ConnectionManager::drop()
a été ajoutée pour permettre
de retirer les connexions lors de l’éxecution.