diff --git a/en/development/testing.rst b/en/development/testing.rst index e4ba529275..8304001c2c 100644 --- a/en/development/testing.rst +++ b/en/development/testing.rst @@ -136,7 +136,7 @@ tests: .. versionadded:: 3.4.1 Support for PHPUnit 6 was addded. If you're using a PHPUnit version lower - than 5.7.0, your tests classes should either extends Cake's classes or + than 5.7.0, your tests classes should either extends CakePHP's classes or ``PHPUnit_Framework_TestCase``. Creating Your First Test Case diff --git a/en/orm/deleting-data.rst b/en/orm/deleting-data.rst index 4570db72d4..46aae4971b 100644 --- a/en/orm/deleting-data.rst +++ b/en/orm/deleting-data.rst @@ -82,11 +82,13 @@ Strict Deletes .. php:method:: deleteOrFail($entity, $options = []) - Using this method will throw an -:php:exc:`Cake\\ORM\\Exception\\PersistenceFailedException` if the entity is -new, has no primary key value, application rules checks failed or the delete was -aborted by a callback. +:php:exc:`Cake\\ORM\\Exception\\PersistenceFailedException` if : + +* the entity is new +* the entity has no primary key value +* application rules checks failed +* the delete was aborted by a callback. If you want to track down the entity that failed to save, you can use the :php:meth:`Cake\\ORM\Exception\\PersistenceFailedException::getEntity()` method:: diff --git a/en/orm/saving-data.rst b/en/orm/saving-data.rst index 51a3e3c313..cc5ae6a1fe 100644 --- a/en/orm/saving-data.rst +++ b/en/orm/saving-data.rst @@ -1112,11 +1112,14 @@ Strict Saving .. php:method:: saveOrFail($entity, $options = []) - Using this method will throw an -:php:exc:`Cake\\ORM\\Exception\\PersistenceFailedException` if the application -rules checks failed, the entity contains errors or the save was aborted by -a callback. Using this can be helpful when you performing complex database +:php:exc:`Cake\\ORM\\Exception\\PersistenceFailedException` if: + +* the application rules checks failed +* the entity contains errors +* the save was aborted by a callback. + +Using this can be helpful when you performing complex database operations without human monitoring, for example, inside a Shell task. .. note:: diff --git a/fr/appendices/3-4-migration-guide.rst b/fr/appendices/3-4-migration-guide.rst index 70c9539006..0f32f346d4 100644 --- a/fr/appendices/3-4-migration-guide.rst +++ b/fr/appendices/3-4-migration-guide.rst @@ -4,6 +4,11 @@ CakePHP 3.4 est une mise à jour de CakePHP 3.3 dont la compatibilité API est complète. Cette page souligne les changements et améliorations faits dans 3.4. +PHP 5.6 devient le minimum requis +================================= +CakePHP 3.4 a maintenant besoin d'au minimum PHP 5.6.0 puisque PHP 5.5 n'est +plus supporté et ne recevra plus de correctifs de sécurité. + Dépréciations ============= @@ -21,13 +26,13 @@ suivent le pattern des "objets immutables" décrit dans le standard PSR-7. Plusieurs propriétés de ``Cake\Network\Request`` ont été dépréciées : - * ``Request::$params`` est dépréciée. Utilisez ``Request::getParam()`` à la place. + * ``Request::$params`` est dépréciée. Utilisez ``Request::getAttribute('params')`` à la place. * ``Request::$data`` est dépréciée. Utilisez ``Request::getData()`` à la place. - * ``Request::$query`` est dépréciée. Utilisez ``Request::getQuery()`` à la place. + * ``Request::$query`` est dépréciée. Utilisez ``Request::getQueryParams()`` à la place. * ``Request::$cookies`` est dépréciée. Utilisez ``Request::getCookie()`` à la place. * ``Request::$base`` est dépréciée. Utilisez ``Request::getAttribute('base')`` à la place. * ``Request::$webroot`` est dépréciée. Utilisez ``Request::getAttribute('webroot')`` à la place. - * ``Request::$here`` est dépréciée. Utilisez ``Request::here()`` à la place. + * ``Request::$here`` est dépréciée. Utilisez ``Request::getRequestTarget()`` à la place. * ``Request::$_session`` a été renommée ``Request::$session``. Certaines méthodes de ``Cake\Network\Request`` ont été dépréciées : @@ -467,3 +472,10 @@ PluginShell * ``cake plugin load`` et ``cake plugin unload`` supportent maintenant une option ``--cli`` qui permet de mettre à jour ``bootstrap_cli.php`` à la place de ``bootstrap.php``. + +TestSuite +========= + +* Le support de ``PHPUnit 6`` a été ajouté. Puisque cette version du framework + a au minimum besoin de PHP 5.6.0, les versions supportées de PHPUnit sont + maintenant ``^5.7|^6.0`` diff --git a/fr/chronos.rst b/fr/chronos.rst index 61bdee6bb1..33f494efc1 100644 --- a/fr/chronos.rst +++ b/fr/chronos.rst @@ -280,7 +280,7 @@ Les autres propriétés accessibles sont: Aides aux Tests --------------- -Quand vous écrivez des tests unitaires, il peut être utile de fixer le time +Quand vous écrivez des tests unitaires, il peut être utile de fixer le *time* courant. Chronos vous permet de fixer le time courant pour chaque classe. Pour l'intégrer dans votre processus de démarrage (bootstrap) de suite de tests, vous pouvez inclure ce qui suit:: @@ -302,3 +302,5 @@ retournée relativement à la date fixée:: $time = new Chronos(); // 1975-12-25 00:00:00 $time = new Chronos('1 hour ago'); // 1975-12-24 23:00:00 +Pour réinitialiser la "fixation" du temps, appelez simplement ``setTestNow()`` +sans paramètre ou avec ``null`` comme paramètre. diff --git a/fr/contributing/code.rst b/fr/contributing/code.rst index b924828005..3a52bde1cd 100644 --- a/fr/contributing/code.rst +++ b/fr/contributing/code.rst @@ -14,7 +14,7 @@ suivants: * Git * PHP |minphpversion| ou supérieur -* PHPUnit 3.7.0 ou supérieur +* PHPUnit 5.7.0 ou supérieur Mettez en place vos informations d'utilisateur avec votre nom/titre et adresse e-mail de travail:: diff --git a/fr/core-libraries/email.rst b/fr/core-libraries/email.rst index 169529fb65..6daa8821cb 100644 --- a/fr/core-libraries/email.rst +++ b/fr/core-libraries/email.rst @@ -331,7 +331,7 @@ d'utiliser le bon theme en utilisant la méthode ``Email::theme()``:: Ceci vous permet de remplacer le template `new_comment` dans votre theme sans modifier le plugin Blog. Le fichier de template devra être créé dans le chemin suivant: -**src/View/Themed/TestTheme/Blog/Email/text/new_comment.ctp**. +**src/Template/Plugin/TestTheme/Plugin/Blog/Email/text/new_comment.ctp**. Envoyer les pièces jointes ========================== @@ -421,7 +421,7 @@ ressembler à cela:: Vous devez intégrer la méthode ``send(Email $email)`` avec votre logique personnalisée. En option, vous pouvez intégrer la méthode -``config($config)``. ``config()`` est appelée avant send() et vous permet +``setConfig($config)``. ``setConfig()`` est appelée avant send() et vous permet d'accepter les configurations de l'utilisateur. Par défaut, cette méthode met la configuration dans l'attribut protégé ``$_config``. diff --git a/fr/development/errors.rst b/fr/development/errors.rst index 1b063cfb70..47ed441298 100644 --- a/fr/development/errors.rst +++ b/fr/development/errors.rst @@ -81,11 +81,11 @@ une logique de gestion des erreurs personnalisée. Un exemple serait:: { public function _displayError($error, $debug) { - return 'Il y a eu une erreur!'; + echo 'Il y a eu une erreur!'; } public function _displayException($exception) { - return 'Il y a eu un exception'; + echo 'Il y a eu un exception'; } } @@ -327,6 +327,13 @@ Autres Exceptions Intégrées Une behavior du model n'a pas pu être trouvé. +.. php:exception:: PersistenceFailedException + + Une entity n'a pas pu être sauvegardée / supprimée en utilisant :php:meth:`Cake\\ORM\\Table::saveOrFail()` ou + :php:meth:`Cake\\ORM\\Table::deleteOrFail()` + + .. versionadded:: 3.4.1 PersistenceFailedException a été ajoutée. + .. php:namespace:: Cake\Datasource\Exception .. php:exception:: RecordNotFoundException diff --git a/fr/development/testing.rst b/fr/development/testing.rst index d280be45c5..109df42678 100755 --- a/fr/development/testing.rst +++ b/fr/development/testing.rst @@ -36,6 +36,9 @@ Pour installer PHPUnit avec Composer: .. code-block:: bash + $ php composer.phar require --dev phpunit/phpunit:"^5.7|^6.0" + + // Avant CakePHP 3.4.1 $ php composer.phar require --dev phpunit/phpunit Ceci va ajouter la dépendance à la section ``require-dev`` de votre @@ -140,7 +143,7 @@ conventions. En ce qui concerne les tests: #. Les noms de ces fichiers doivent finir par **Test.php** plutôt que juste **.php**. #. Les classes contenant les tests doivent étendre ``Cake\TestSuite\TestCase``, - ``Cake\TestSuite\ControllerTestCase`` ou ``\PHPUnit_Framework_TestCase``. + ``Cake\TestSuite\IntegrationTestCase`` ou ``\PHPUnit\Framework\TestCase``. #. Comme les autres noms de classe, les noms de classe des cas de test doivent correspondre au nom de fichier. **RouterTest.php** doit contenir ``class RouterTest extends TestCase``. @@ -149,6 +152,11 @@ conventions. En ce qui concerne les tests: Vous pouvez aussi utiliser l'annotation ``@test`` pour marquer les méthodes en méthodes de test. +.. versionadded:: 3.4.1 + Le support de PHPUnit 6 a été ajouté. Si vous utilisez une version de PHPUnit + inférieure à 5.7.0, vos classes de tests devront soit *extends* les classes + de CakePHP, soit ``PHPUnit_Framework_TestCase``. + Créer Votre Premier Cas de Test =============================== diff --git a/fr/index.rst b/fr/index.rst index e15fca15d4..2f042c602b 100644 --- a/fr/index.rst +++ b/fr/index.rst @@ -2,7 +2,7 @@ Bienvenue ######### CakePHP 3 est un framework pour le développement web qui fonctionne avec -**PHP 7** (min. PHP |minphpversion|). +**PHP 7.1** (min. PHP |minphpversion|). Vous pouvez lire :doc:`CakePHP en un coup d'oeil ` pour avoir une introduction aux fondamentaux de CakePHP 3. diff --git a/fr/installation.rst b/fr/installation.rst index fb7ff9d9e8..7d1d643606 100755 --- a/fr/installation.rst +++ b/fr/installation.rst @@ -123,7 +123,7 @@ Rester à jour avec les Derniers Changements de CakePHP Par défaut c'est ce à quoi le **composer.json** de votre application ressemble:: "require": { - "cakephp/cakephp": "3.3.*" + "cakephp/cakephp": "3.4.*" } A chaque fois que vous lancez ``php composer.phar update``, vous allez diff --git a/fr/orm/associations.rst b/fr/orm/associations.rst index e262904209..9e40d83558 100644 --- a/fr/orm/associations.rst +++ b/fr/orm/associations.rst @@ -540,19 +540,8 @@ suit:: } } -Nous pouvons aussi définir une relation plus spécifique en utilisant les -setters:: - - // In src/Model/Table/ArticlesTable.php - class ArticlesTable extends Table - { - - public function initialize(array $config) - { - $this->belongsToMany('Tags') - ->setJoinTable('articles_tags'); - } - } +Nous pouvons aussi définir une relation plus spécifique en passant un tableau +de configuration:: // In src/Model/Table/TagsTable.php class TagsTable extends Table diff --git a/fr/orm/deleting-data.rst b/fr/orm/deleting-data.rst index c7d5bc0bba..c2ad330b41 100644 --- a/fr/orm/deleting-data.rst +++ b/fr/orm/deleting-data.rst @@ -83,3 +83,30 @@ lignes ont été supprimées. deleteAll *ne* va *pas* déclencher les événements beforeDelete/afterDelete. Si vous avez besoin d'eux, chargez d'abord une collection d'enregistrements et supprimez les. + +Suppressions strictes +--------------------- + +.. php:method:: deleteOrFail($entity, $options = []) + +Utiliser cette méthode lancera une :php:exc:`Cake\\ORM\\Exception\\PersistenceFailedException` +si : + +* l'entity est _new_ (si elle n'a jamais été persistée) +* l'entity n'a pas de valeur pour sa clé primaire +* les règles de validation ont échoué +* la suppression a été annulée via un _callback_. + +Si vous voulez trouver l'entity qui n'a pas pu être sauvegardée, vous pouvez +utiliser la méthode :php:meth:`Cake\\ORM\Exception\\PersistenceFailedException::getEntity()`:: + + try { + $table->deleteOrFail($entity); + } catch (\Cake\ORM\Exception\PersistenceFailedException $e) { + echo $e->getEntity(); + } + +Puisque cette méthode utilise la méthode :php:meth:`Cake\\ORM\\Table::delete()`, +tous les événements de ``delete`` seront déclenchés. + +.. versionadded:: 3.4.1 diff --git a/fr/orm/saving-data.rst b/fr/orm/saving-data.rst index ca7d2c6d39..5c5c67bb30 100644 --- a/fr/orm/saving-data.rst +++ b/fr/orm/saving-data.rst @@ -665,9 +665,9 @@ entities ne soient créées:: // Dans une classe table ou behavior public function beforeMarshal(Event $event, ArrayObject $data, ArrayObject $options) { - if (isset($data['username'])) { - $data['username'] = mb_strtolower($data['username']); - } + if (isset($data['username'])) { + $data['username'] = mb_strtolower($data['username']); + } } Le paramètre ``$data`` est une instance ``ArrayObject``, donc vous n'avez pas @@ -1193,6 +1193,41 @@ correctement les données complexes va permettre à des utilisateurs mal intentionnés d'être capable de stocker des données qu'ils ne pourraient pas stocker normalement. +Strict Saving +============= + +.. php:method:: saveOrFail($entity, $options = []) + +Utiliser cette méthode lancera une :php:exc:`Cake\\ORM\\Exception\\PersistenceFailedException` +si : + +* les règles de validation ont échoué +* l'entity contient des erreurs +* la sauvegarde a été annulée par un _callback_. + +Utiliser cette méthode peut être utile pour effectuer des opérations complexes +en base de données sans surveillance humaine comme lors de l'utilisation de +script via des _tasks_ Shell. + +.. note:: + + Si vous utilisez cette méthode dans un Controller, assurez-vous de + capturer la ``PersistenceFailedException`` qui pourrait être levée. + +Si vous voulez trouver l'entity qui n'a pas pu être sauvegardée, vous pouvez +utiliser la méthode :php:meth:`Cake\\ORM\Exception\\PersistenceFailedException::getEntity()`:: + + try { + $table->saveOrFail($entity); + } catch (\Cake\ORM\Exception\PersistenceFailedException $e) { + echo $e->getEntity(); + } + +Puisque cette méthode utilise la méthode :php:meth:`Cake\\ORM\\Table::save()`, +tous les événements de ``save`` seront déclenchés. + +.. versionadded:: 3.4.1 + Sauvegarder Plusieurs Entities ============================== @@ -1200,7 +1235,7 @@ Sauvegarder Plusieurs Entities En utilisant cette méthode, vous pouvez sauvegarder plusieurs entities de façon -atomique. ``$entites`` peuvent être un tableau d'entities créé avec +atomique. ``$entities`` peuvent être un tableau d'entities créé avec ``newEntities()`` / ``patchEntities()``. ``$options`` peut avoir les mêmes options que celles acceptées par ``save()``:: diff --git a/fr/orm/validation.rst b/fr/orm/validation.rst index 5536bc8c8d..f1d7d04733 100644 --- a/fr/orm/validation.rst +++ b/fr/orm/validation.rst @@ -429,6 +429,7 @@ Règles sur le Nombre de Valeurs d'une Association Si vous devez valider qu'une propriété ou une association contient un bon nombre de valeurs, vous pouvez utiliser la règle ``validCount()``:: + // Dans le fichier ArticlesTable.php // Pas plus de 5 tags sur un article. $rules->add($rules->validCount('tags', 5, '<=', 'Vous pouvez avoir seulement 5 tags')); @@ -438,6 +439,7 @@ paramètre vous permet de définir l'opérateur de comparaison à utiliser. ``== assurer qu'un nombre d'une propriété est entre certaines valeurs, utilisez deux règles:: + // Dans le fichier ArticlesTable.php // Entre 3 et 5 tags $rules->add($rules->validCount('tags', 3, '>=', 'Vous devez avoir au moins 3 tags')); $rules->add($rules->validCount('tags', 5, '<=', 'Vous devez avoir au moins 5 tags')); diff --git a/fr/plugins.rst b/fr/plugins.rst index 523d2300aa..58f25c8472 100755 --- a/fr/plugins.rst +++ b/fr/plugins.rst @@ -459,6 +459,10 @@ en utilisant l'habituelle :term:`syntaxe de plugin`:: $contacts = TableRegistry::get('ContactManager.Contacts'); +Si vous êtes dans un Controller, vous pouvez aussi utiliser:: + + $this->loadModel('ContactsMangager.Contacts'); + Vues du Plugin ============== diff --git a/fr/views/helpers/paginator.rst b/fr/views/helpers/paginator.rst index 60e6037295..e40391dbbb 100644 --- a/fr/views/helpers/paginator.rst +++ b/fr/views/helpers/paginator.rst @@ -112,7 +112,7 @@ Création de liens triés :param string $key: Le nom de la clé du jeu d'enregistrement qui doit être triée. - :param string $title: Titre du lien. Si $title est null $key sera + :param string $title: Titre du lien. Si $title est null, $key sera utilisée pour le titre et sera générée par inflexion. :param array $options: Options pour le tri des liens.