diff --git a/en/appendices/3-5-migration-guide.rst b/en/appendices/3-5-migration-guide.rst index f9670cc731..30c1845e3b 100644 --- a/en/appendices/3-5-migration-guide.rst +++ b/en/appendices/3-5-migration-guide.rst @@ -194,7 +194,6 @@ Collection * ``Cake\Collection\Collection::avg()`` was added. * ``Cake\Collection\Collection::median()`` was added. - Core ---- diff --git a/fr/appendices/3-5-migration-guide.rst b/fr/appendices/3-5-migration-guide.rst index 16a8cab665..3f053b9043 100644 --- a/fr/appendices/3-5-migration-guide.rst +++ b/fr/appendices/3-5-migration-guide.rst @@ -27,6 +27,12 @@ version 4.0.0, à partir de laquelle ils seront supprimés. ``Cake\Database\TableSchemaAwareInterface`` à la place. * ``Cake\Console\ShellDispatcher`` est dépréciée. Vous devez mettre à jour vos Applications pour qu'elles utilisent ``Cake\Console\CommandRunner`` à la place. +* ``Cake\Database\Schema\TableSchema::column()`` est dépréciée. Utilisez + ``Cake\Database\Schema\TableSchema::getColumn()`` à la place. +* ``Cake\Database\Schema\TableSchema::constraint()`` est dépréciée. Utilisez + ``Cake\Database\Schema\TableSchema::getConstraint()`` à la place. +* ``Cake\Database\Schema\TableSchema::index()`` est dépréciée. Utilisez + ``Cake\Database\Schema\TableSchema::getIndex()`` à la place. Dépréciation des Méthodes Get / Set combinées --------------------------------------------- @@ -51,16 +57,23 @@ par des méthodes ``getX()`` et ``setX()`` : * ``outputAs()`` ``Cake\Database\Connection`` * ``logger()`` -``Cake\Datasource\TypedResultTrait`` +``Cake\Database\TypedResultInterface`` + * ``returnType()`` +``Cake\Database\TypedResultTrait`` * ``returnType()`` ``Cake\Database\Log\LoggingStatement`` * ``logger()`` ``Cake\Datasource\ModelAwareTrait`` * ``modelType()`` ``Cake\Database\Query`` - * ``valueBinder()`` est maintenant ``getValueBinder()`` + * la partie "getter" de ``valueBinder()`` (maintenant ``getValueBinder()``) +``Cake\Database\Schema\TableSchema`` + * ``columnType()`` ``Cake\Datasource\QueryTrait`` + * la partie "getter" de ``eagerLoaded()`` (maintenant ``isEagerLoaded()``) * ``eagerLoaded()`` (maintenant ``isEagerLoaded()``) +``Cake\Event\EventDispatcherInterface`` + * ``eventManager()`` ``Cake\Event\EventDispatcherTrait`` * ``eventManager()`` ``Cake\Error\Debugger`` @@ -70,6 +83,8 @@ par des méthodes ``getX()`` et ``setX()`` : ``Cake\I18n\I18n`` * ``locale()`` * ``translator()`` +``Cake\ORM\Association\BelongsToMany`` + * ``sort()`` ``Cake\ORM\LocatorAwareTrait`` * ``tableLocator()`` ``Cake\ORM\EntityTrait`` @@ -77,6 +92,9 @@ par des méthodes ``getX()`` et ``setX()`` : ``setInvalidField()``, maintenant ``getInvalidField()``) ``Cake\ORM\Table`` * ``validator()`` +``Cake\Routing\RouteBuilder`` + * ``extensions()`` + * ``routeClass()`` ``Cake\Routing\RouteCollection`` * ``extensions()`` ``Cake\TestSuite\TestFixture`` @@ -165,6 +183,19 @@ le moteur était mal configuré ou indisponible. Reportez-vous à la section :ref:`cache-configuration-fallback` pour plus d'informations sur la configuration de 'fallbacks' pour vos configurations de cache. +Support de dotenv au squelette d'Application +-------------------------------------------- + +Le squelette d'application possède maintenant une intégration "dotenv", facilitant +l'utilisation de variables d'environnement pour configurer votre application. +Référez-vous à la section :ref:`environment-variables` pour plus d'informations. + +Collection +---------- + +* ``Cake\Collection\Collection::avg()`` a été ajoutée. +* ``Cake\Collection\Collection::median()`` a été ajoutée. + Core ---- diff --git a/fr/core-libraries/collections.rst b/fr/core-libraries/collections.rst index 380b2f98b8..736acaeab6 100644 --- a/fr/core-libraries/collections.rst +++ b/fr/core-libraries/collections.rst @@ -55,27 +55,27 @@ Liste des Méthodes .. table:: :class: docutils internal-toc - +-----------------------+---------------------------+----------------------+---------------------+ - | :php:meth:`append` | :php:meth:`buffered` | :php:meth:`combine` | :php:meth:`compile` | - +-----------------------+---------------------------+----------------------+---------------------+ - | :php:meth:`contains` | :php:meth:`countBy` | :php:meth:`chunk` | :php:meth:`each` | - +-----------------------+---------------------------+----------------------+---------------------+ - | :php:meth:`every` | :php:meth:`extract` | :php:meth:`filter` | :php:meth:`first` | - +-----------------------+---------------------------+----------------------+---------------------+ - | :php:meth:`groupBy` | :php:meth:`indexBy` | :php:meth:`insert` | :php:meth:`isEmpty` | - +-----------------------+---------------------------+----------------------+---------------------+ - | :php:meth:`last` | :php:meth:`listNested` | :php:meth:`map` | :php:meth:`match` | - +-----------------------+---------------------------+----------------------+---------------------+ - | :php:meth:`max` | :php:meth:`min` | :php:meth:`nest` | :php:meth:`reduce` | - +-----------------------+---------------------------+----------------------+---------------------+ - | :php:meth:`reject` | :php:meth:`sample` | :php:meth:`shuffle` | :php:meth:`skip` | - +-----------------------+---------------------------+----------------------+---------------------+ - | :php:meth:`some` | :php:meth:`sortBy` | :php:meth:`stopWhen` | :php:meth:`sumOf` | - +-----------------------+---------------------------+----------------------+---------------------+ - | :php:meth:`take` | :php:meth:`through` | :php:meth:`unfold` | :php:meth:`zip` | - +-----------------------+---------------------------+----------------------+---------------------+ - | :php:meth:`transpose` | :php:meth:`chunkWithKeys` | | | - +-----------------------+---------------------------+----------------------+---------------------+ + +---------------------------------------------------+----------------------+------------------------+ + | :php:meth:`append` | :php:meth:`avg` | :php:meth:`buffered` | :php:meth:`combine` | + +---------------------------+-----------------------+----------------------+------------------------+ + | :php:meth:`compile` | :php:meth:`contains` | :php:meth:`countBy` | :php:meth:`chunk` | + +---------------------------+-----------------------+----------------------+------------------------+ + | :php:meth:`chunkWithKeys` | :php:meth:`each` | :php:meth:`every` | :php:meth:`extract` | + +---------------------------+-----------------------+----------------------+------------------------+ + | :php:meth:`filter` | :php:meth:`first` | :php:meth:`groupBy` | :php:meth:`indexBy` | + +---------------------------+-----------------------+----------------------+------------------------+ + | :php:meth:`insert` | :php:meth:`isEmpty` | :php:meth:`last` | :php:meth:`listNested` | + +---------------------------+-----------------------+----------------------+------------------------+ + | :php:meth:`map` | :php:meth:`match` | :php:meth:`max` | :php:meth:`median` | + +---------------------------+-----------------------+----------------------+------------------------+ + | :php:meth:`min` | :php:meth:`nest` | :php:meth:`reduce` | :php:meth:`reject` | + +---------------------------+-----------------------+----------------------+------------------------+ + | :php:meth:`sample` | :php:meth:`shuffle` | :php:meth:`skip` | :php:meth:`some` | + +---------------------------+-----------------------+----------------------+------------------------+ + | :php:meth:`sortBy` | :php:meth:`stopWhen` | :php:meth:`sumOf` | :php:meth:`take` | + +---------------------------+-----------------------+----------------------+------------------------+ + | :php:meth:`through` | :php:meth:`transpose` | :php:meth:`unfold` | :php:meth:`zip` | + +---------------------------+-----------------------+----------------------+------------------------+ Faire une Itération =================== @@ -483,6 +483,41 @@ les éléments:: $sumOfDadAges = $collection->sumOf('dad.age'); +.. php:method:: avg($matcher = null) + +Calcule la moyenne des éléments de la collection. Vous pouvez passer, en +option, un "path" à matcher ou une fonction pour extraire les valeurs pour +lesquelles vous souhaitez générer la moyenne:: + + $items = [ + ['invoice' => ['total' => 100]], + ['invoice' => ['total' => 200]], + ]; + + // Moyenne : 150 + $average = (new Collection($items))->avg('invoice.total'); + +.. versionadded:: 3.5.0 + +.. php:method:: median($matcher = null) + +Calcule la valeur médianne d'un jeu d'élément. Vous pouvez passer, en +option, un "path" à matcher ou une fonction pour extraire les valeurs pour +lesquelles vous souhaitez calculer la valeur médianne:: + + $items = [ + ['invoice' => ['total' => 400]], + ['invoice' => ['total' => 500]], + ['invoice' => ['total' => 100]], + ['invoice' => ['total' => 333]], + ['invoice' => ['total' => 200]], + ]; + + // Valeur médiane : 333 + $median = (new Collection($items))->median('invoice.total'); + +.. versionadded:: 3.5.0 + Grouper et Compter ------------------ diff --git a/fr/development/configuration.rst b/fr/development/configuration.rst index 4a61b4f238..9ac2f9ebe1 100755 --- a/fr/development/configuration.rst +++ b/fr/development/configuration.rst @@ -231,6 +231,48 @@ Configuration de Inflection Regardez :ref:`inflection-configuration` pour plus d'informations. +.. _environment-variables: + +Variables d'Environnement +========================= + +Beaucoup de fournisseurs de cloud, comme Heroku, vous permettent de définir des +variables pour les données de configuration. Vous pouvez configurer CakePHP +via des variables d'environnement à la manière `12factor app `_. +Les variables d'environnement permettent à votre application d'avoir besoin de moins +d'états, facilitant la gestion de votre application lors de déploiements sur +plusieurs environnements. + +Comme vous pouvez le voir dans votre fichier **app.php**, la fonction ``env()`` +est utilisée pour lire des données de configuration depuis l'environnement et +construire la configuration de l'application. +CakePHP utilise les chaînes :term:`DSN` pour les configurations des bases de données, +des logs, des transports d'emails et du cache, vous permettant de faire varier les +configurations d'un environnement à l'autre. + +Lors d'un développement local, CakePHP utilise `dotenv +`_ pour faciliter l'utilisation des variables +d'environnement. Vous verrez un fichier ``config/.env.default`` dans votre application. +En copiant ce fichier dans ``config/.env`` et en modifiant les valeurs, vous pourrez +configurer votre application. + +Il est conseillé de ne pas commiter le fichier ``config/.env`` dans votre dépôt +et d'utiliser le fichier ``config/.env.default`` comme template avec des valeurs +par défaut (ou des placeholders) pour que les membres de votre équipe sachent +quelles variables sont utilisées et ce que chaque variable est censée contenir. + +Une fois vos variables d'environnement définies, vous pouvez utiliser la +fonction ``env()`` pour lire les données depuis l'environnement:: + + $debug = env('APP_DEBUG', false); + +La seconde valeur passée à la fonction ``env()`` est la valeur par défaut. Cette +valeur sera utilisée si aucune variable d'environnement n'existe pas pour la clé +fournie. + +.. versionchanged:: 3.5.0 + Support de la librairie dotenv ajouté au squelette d'application. + Classe Configure ================ @@ -675,45 +717,6 @@ Charger les plugins et les événements dans ``Application::bootstrap()`` rend les :ref:`integration-testing` plus faciles car les événements et les routes seront ainsi à nouveau traités pour chaque méthode de test. -Variables d'environnement -========================= - -Certains fournisseurs d'architectures dans le cloud comme Heroku, vous -permettent de définir des variables d'environnement. En définissant des -variables d'environnement, vous pouvez configurer vos applications comme des -applications 12factor. Suivre les `instructions pour les applications 12factor `_ -vous permet de créer des applications "stateless" et donc de faciliter le -déploiement de votre application. -Cela signifie ainsi que si vous avez besoin par exemple de changer votre base -de données, vous avez juste besoin de changer la variable DATABASE_URL dans la -configuration sur votre fournisseur sans rien avoir à changer dans votre code. - -Comme vous pouvez le voir dans le fichier **app.php**, les variables suivantes -sont concernés : - -- ``DEBUG`` (``0`` or ``1``) -- ``APP_ENCODING`` (ex: UTF-8) -- ``APP_DEFAULT_LOCALE`` (ex: ``en_US``) -- ``SECURITY_SALT`` -- ``CACHE_DEFAULT_URL`` (ex: ``File:///?prefix=myapp_&serialize=true&timeout=3600&path=../tmp/cache/``) -- ``CACHE_CAKECORE_URL`` (ex: ``File:///?prefix=myapp_cake_core_&serialize=true&timeout=3600&path=../tmp/cache/persistent/``) -- ``CACHE_CAKEMODEL_URL`` (ex: ``File:///?prefix=myapp_cake_model_&serialize=true&timeout=3600&path=../tmp/cache/models/``) -- ``EMAIL_TRANSPORT_DEFAULT_URL`` (ex: ``smtp://user:password@hostname:port?tls=null&client=null&timeout=30``) -- ``DATABASE_URL`` (ex: ``mysql://user:pass@db/my_app``) -- ``DATABASE_TEST_URL`` (ex: ``mysql://user:pass@db/test_my_app``) -- ``LOG_DEBUG_URL`` (ex: ``file:///?levels[]=notice&levels[]=info&levels[]=debug&file=debug&path=../logs/``) -- ``LOG_ERROR_URL`` (ex: ``file:///?levels[]=warning&levels[]=error&levels[]=critical&levels[]=alert&levels[]=emergency&file=error&path=../logs/``) - -Comme vous pouvez le voir dans ces exemples, nous définissons certaines options -de configuration à l'aide de chaînes :term:`DSN`. C'est le cas pour les bases -de données, les logs, le transport d'emails et les configurations du cache. - -Si certaines variables d'environnement ne sont pas définies dans votre environnement, -CakePHP utilisera les valeurs définies dans **app.php**. Vous pouvez utiliser -la `librairie php-dotenv `_ pour -utiliser les variables d'environnement dans vos développements en local. -Reportez-vous aux instructions dans le README pour plus d'informations. - Désactiver les tables génériques ================================ diff --git a/fr/development/routing.rst b/fr/development/routing.rst index e3a9bad2ad..dbcda57b8e 100644 --- a/fr/development/routing.rst +++ b/fr/development/routing.rst @@ -316,7 +316,8 @@ l'exemple ci-dessus peut être réécrit en:: // Crée un builder avec une classe de Route différente. $routes->scope('/', function ($routes) { - $routes->routeClass(DashedRoute::class); + + $routes->setRouteClass(DashedRoute::class); $routes->connect('/:controller/:id', ['action' => 'view']) ->setPatterns(['id' => '[0-9]+']); @@ -856,7 +857,7 @@ Pour restreindre les extensions à un *scope* spécifique, vous pouvez les défi en utilisant la méthode :php:meth:`Cake\\Routing\\RouteBuilder::extensions()`:: Router::scope('/', function ($routes) { - $routes->extensions(['json', 'xml']); + $routes->setExtensions(['json', 'xml']); // ... }); @@ -880,7 +881,7 @@ souhaitez créer une URL comme ``/page/title-of-page.html`` vous devriez créer un scope comme ceci:: Router::scope('/page', function ($routes) { - $routes->extensions(['json', 'xml', 'html']); + $routes->setExtensions(['json', 'xml', 'html']); $routes->connect( '/:title', ['controller' => 'Pages', 'action' => 'view'] @@ -989,7 +990,7 @@ de données REST, nous ferions quelque chose comme ceci:: //Dans config/routes.php Router::scope('/', function ($routes) { - $routes->extensions(['json']); + $routes->setExtensions(['json']); $routes->resources('Recipes'); }); @@ -1397,7 +1398,8 @@ d'une route en utilisant l'option ``routeClass``:: // Ou en définissant la routeClass dans votre scope. $routes->scope('/', function ($routes) { - $routes->routeClass('SlugRoute'); + // Avant 3.5.0, utilisez `routeClass()` + $routes->setRouteClass('SlugRoute'); $routes->connect( '/:slug', ['controller' => 'Articles', 'action' => 'view']