diff --git a/en/development/configuration.rst b/en/development/configuration.rst
index 4b93868d8a..c344c475f6 100644
--- a/en/development/configuration.rst
+++ b/en/development/configuration.rst
@@ -681,7 +681,6 @@ use the values that are defined in the **app.php**. You can use
environment variables in a local development. See the Readme instructions of the
library for more information.
-
Disabling Generic Tables
========================
@@ -691,7 +690,7 @@ make debugging more difficult in some scenarios.
You can check if any query was emitted from a generic table class via DebugKit
via the SQL panel in DebugKit. If you're still having trouble diagnosing an
-issue that could be caused by auto-tables, you can throw an exeception when
+issue that could be caused by auto-tables, you can throw an exception when
CakePHP implicitly uses a generic ``Cake\ORM\Table`` instead of your concrete
class like so::
diff --git a/fr/controllers/request-response.rst b/fr/controllers/request-response.rst
index 06be900f4d..fa47acf716 100644
--- a/fr/controllers/request-response.rst
+++ b/fr/controllers/request-response.rst
@@ -609,6 +609,71 @@ jusqu'à ce que la réponse soit émise par ``Cake\Http\Server``.
Vous pouvez maintenant utiliser la méthode :php:meth:`Cake\\Http\\Response::withLocation()`
pour définir ou obtenir directement le header "redirect location".
+Définir le Corps de la réponse
+------------------------------
+
+.. php:method:: withStringBody($string)
+
+Pour définir une chaîne comme corps de réponse, écrivez ceci::
+
+ // Définit une chaîne dans le corps
+ $response = $response->withStringBody('My Body');
+
+ // Si vous souhaitez une réponse JSON
+ $response = $response->withType('application/json')
+ ->withStringBody(json_encode(['Foo' => 'bar']));
+
+.. versionadded:: 3.4.3
+
+ ``withStringBody()`` was added in 3.4.3
+
+.. php:method:: withBody($body)
+
+Pour définir le corps de la réponse, utilisez la méthode ``withBody()`` qui est
+fournie par le :php:class:`Zend\\Diactoros\\MessageTrait`::
+
+ $response = $response->withBody($stream);
+
+ // Avant 3.4.0, pour définir le corps de la réponse
+ $this->response->body('My Body');
+
+Assurez-vous que ``$stream`` est un objet de type :php:class:`Psr\\Http\\Message\\StreamInterface`.
+Ci-dessous, la manière de créer un nouveau stream.
+
+Vous pouvez également "*streamer*" les réponses depuis des fichiers en
+utilisant des streams :php:class:`Zend\\Diactoros\\Stream`::
+
+ // Pour "streamer" depuis un fichier
+ use Zend\Diactoros\Stream;
+
+ $stream = new Stream('/path/to/file', 'rb');
+ $response = $response->withBody($stream);
+
+Vous pouvez aussi streamer des réponses depuis un callback en utilisant un
+``CallbackStream``. C'est utile si vous avez des ressources comme des images,
+des fichiers CSV ou des fichiers PDF à streamer au client::
+
+ // Streamer depuis un callback
+ use Cake\Http\CallbackStream;
+
+ // Création d'une image
+ $img = imagecreate(100, 100);
+ // ...
+
+ $stream = new CallbackStream(function () use ($img) {
+ imagepng($img);
+ });
+ $response = $response->withBody($stream);
+
+ // Avant 3.4.0, vous pouvez utiliser la méthode ci-dessous pour créer des
+ // réponses sous forme de stream
+ $file = fopen('/some/file.png', 'r');
+ $this->response->body(function () use ($file) {
+ rewind($file);
+ fpassthru($file);
+ fclose($file);
+ });
+
Définir le Character Set
------------------------
diff --git a/fr/core-libraries/email.rst b/fr/core-libraries/email.rst
index 6daa8821cb..cf59529c98 100644
--- a/fr/core-libraries/email.rst
+++ b/fr/core-libraries/email.rst
@@ -224,7 +224,7 @@ sont utilisées:
- ``'transport'``: Nom du Transport. Regardez
:php:meth:`~Cake\\Mailer\\Email::setConfigTransport()`.
- ``'log'``: Niveau de Log pour connecter les headers de l'email headers et le
- message. ``true`` va utiliser LOG_DEBUG. Regardez aussi ``CakeLog::write()``.
+ message. ``true`` va utiliser LOG_DEBUG. Regardez aussi :ref:`logging-levels`.
- ``'helpers'``: Tableau de helpers utilisés dans le template email. ``Email::setHelpers()``.
Toutes ces configurations sont optionnelles, excepté ``'from'``.
diff --git a/fr/development/configuration.rst b/fr/development/configuration.rst
index 03a02c03c8..4a61b4f238 100755
--- a/fr/development/configuration.rst
+++ b/fr/development/configuration.rst
@@ -638,19 +638,20 @@ courantes:
- Configurer les inflections personnalisées.
- Charger les fichiers de configuration.
-It might be tempting to place formatting functions there in order to use them in
-your controllers. As you'll see in the :doc:`/controllers` and :doc:`/views`
-sections there are better ways you add custom logic to your application.
+Il pourrait être tentant de placer des fonctions de formatage ici pour les
+utiliser dans vos controllers. Comme vous le verrez dans les documentations sur
+les :doc:`/controllers` et les :doc:`/views`, il y a de meilleurs moyens pour
+vous d'ajouter de la logique personnalisée dans votre application.
.. _application-bootstrap:
Application::bootstrap()
------------------------
-In addition to the **config/bootstrap.php** file which should be used to
-configure low-level concerns of your application, you can also use the
-``Application::bootstrap()`` hook method to load/initialize plugins, and attach
-global event listeners::
+En plus du fichier **config/bootstrap.php** qui doit être utilisé pour faire de
+la configuration "bas niveau" de votre application, vous pouvez également
+utiliser la méthode "hook" ``Application::bootstrap()`` pour charger /
+initialiser des plugins et attacher des écouteurs d'événements globaux::
// in src/Application.php
namespace App;
@@ -662,54 +663,87 @@ global event listeners::
{
public function bootstrap()
{
- // Call the parent to `require_once` config/bootstrap.php
+ // Appeler la méthode parente permet de faire le `require_once`
+ // pour charger le fichier config/bootstrap.php
parent::bootstrap();
Plugin::load('MyPlugin', ['bootstrap' => true, 'routes' => true]);
}
}
-Loading plugins/events in ``Application::bootstrap()`` makes
-:ref:`integration-testing` easier as events and routes will be re-processed on
-each test method.
+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.
-Environment Variables
-=====================
+Variables d'environnement
+=========================
-Some of the modern cloud providers, like Heroku, let you define environment
-variables. By defining environment variables, you can configure your CakePHP
-app as an 12factor app. Following the
-`12factor app instructions `_ is a good way to create a
-stateless app, and to ease the deployment of your app.
-This means for example, that if you need to change your database, you'll just
-need to modify a DATABASE_URL variable on your host configuration without the
-need to change it in your source code.
+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.
-As you can see in your **app.php**, the following variables are concerned:
+Comme vous pouvez le voir dans le fichier **app.php**, les variables suivantes
+sont concernés :
- ``DEBUG`` (``0`` or ``1``)
-- ``APP_ENCODING`` (ie UTF-8)
-- ``APP_DEFAULT_LOCALE`` (ie ``en_US``)
+- ``APP_ENCODING`` (ex: UTF-8)
+- ``APP_DEFAULT_LOCALE`` (ex: ``en_US``)
- ``SECURITY_SALT``
-- ``CACHE_DEFAULT_URL`` (ie ``File:///?prefix=myapp_&serialize=true&timeout=3600&path=../tmp/cache/``)
-- ``CACHE_CAKECORE_URL`` (ie ``File:///?prefix=myapp_cake_core_&serialize=true&timeout=3600&path=../tmp/cache/persistent/``)
-- ``CACHE_CAKEMODEL_URL`` (ie ``File:///?prefix=myapp_cake_model_&serialize=true&timeout=3600&path=../tmp/cache/models/``)
-- ``EMAIL_TRANSPORT_DEFAULT_URL`` (ie ``smtp://user:password@hostname:port?tls=null&client=null&timeout=30``)
-- ``DATABASE_URL`` (ie ``mysql://user:pass@db/my_app``)
-- ``DATABASE_TEST_URL`` (ie ``mysql://user:pass@db/test_my_app``)
-- ``LOG_DEBUG_URL`` (ie ``file:///?levels[]=notice&levels[]=info&levels[]=debug&file=debug&path=../logs/``)
-- ``LOG_ERROR_URL`` (ie ``file:///?levels[]=warning&levels[]=error&levels[]=critical&levels[]=alert&levels[]=emergency&file=error&path=../logs/``)
-
-As you can see in the examples, we define some options configuration as
-:term:`DSN` strings. This is the case for databases, logs, email transport and
-cache configurations.
-
-If the environment variables are not defined in your environment, CakePHP will
-use the values that are defined in the **app.php**. You can use
-`php-dotenv library `_ to use
-environment variables in a local development. See the Readme instructions of the
-library for more information.
+- ``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
+================================
+
+Bien qu'utiliser les classes génériques de Table (aussi appeler les "auto-tables")
+soit pratique lorsque vous développez rapidement de nouvelles applications, les
+tables génériques rendent le debug plus difficile dans certains cas.
+
+Vous pouvez vérifier si une requête a été générée à partir d'une table générique
+via le DebugKit, dans le panel SQL. Si vous avez encore des difficultés à
+diagnostiquer un problème qui pourrait être causé par les auto-tables, vous
+pouvez lancer une exception quand CakePHP utilise implicitement une ``Cake\ORM\Table``
+générique plutôt que la vraie classe du Model::
+
+ // Dans votre fichier bootstrap.php
+ use Cake\Event\EventManager;
+ use Cake\Network\Exception\InternalErrorException;
+
+ $isCakeBakeShellRunning = (PHP_SAPI === 'cli' && isset($argv[1]) && $argv[1] === 'bake');
+ if (!$isCakeBakeShellRunning) {
+ EventManager::instance()->on('Model.initialize', function($event) {
+ $subject = $event->getSubject();
+ if (get_class($subject === 'Cake\ORM\Table') {
+ $msg = sprintf(
+ 'Missing table class or incorrect alias when registering table class for database table %s.',
+ $subject->getTable());
+ throw new InternalErrorException($msg);
+ }
+ });
+ }
.. meta::
:title lang=fr: Configuration
- :keywords lang=fr: configuration finie,legacy database,configuration base de données,value pairs,connection par défaut,configuration optionnelle,exemple base de données,classe php,configuration base de données,base de données par default,étapes de configuration,index base de données,détails de configuration,classe base de données,hôte localhost,inflections,valeur clé,connection base de données,facile,basic web
+ :keywords lang=fr: configuration finie,legacy database,configuration base de données,value pairs,connection par défaut,configuration optionnelle,exemple base de données,classe php,configuration base de données,base de données par default,étapes de configuration,index base de données,détails de configuration,classe base de données,hôte localhost,inflections,valeur clé,connection base de données,facile,basic web,auto tables,auto-tables,table générique,class
diff --git a/fr/installation.rst b/fr/installation.rst
index 7d1d643606..f4ecb3cb35 100755
--- a/fr/installation.rst
+++ b/fr/installation.rst
@@ -144,6 +144,24 @@ la prochaine version majeure sort. De plus, composer ne met pas en cache les
branches de développement, donc cela ralentit les installs/updates consécutifs
de composer.
+Installation en utilisant Oven
+------------------------------
+
+Une autre manière rapide d'installer CakePHP est d'utiliser `Oven `_.
+Il s'agit d'un simple script PHP qui vérifie si vous respectez les
+recommandations systèmes, installe le squelette d'application CakePHP et met
+en place l'environnement de développement.
+
+Après l'installation, votre application CakePHP est prête !
+
+.. note::
+
+ IMPORTANT : Ceci n'est pas un script de déploiement. Il s'agit d'une aide à
+ l'installation de CakePHP. Il permet de mettre en place un environnement de
+ développement rapidement. Les environnements de production doivent
+ également prendre en compte d'autres facteurs comme les permissions de
+ fichiers, les configurations de vhost, etc.
+
Permissions
===========
diff --git a/fr/orm/table-objects.rst b/fr/orm/table-objects.rst
index 579f93f260..263b5e704c 100644
--- a/fr/orm/table-objects.rst
+++ b/fr/orm/table-objects.rst
@@ -39,7 +39,7 @@ Par convention, les objets Table vont utiliser une table avec la notation en
minuscule et avec des underscores pour le nom de la classe. Dans l'exemple du
dessus, la table ``articles`` va être utilisée. Si notre classe table était
nommée ``BlogPosts``, votre table serait nommée ``blog_posts``. Vous pouvez
-spécifier la table en utilisant la méthode ``table()``::
+spécifier la table en utilisant la méthode ``setTable()``::
namespace App\Model\Table;
@@ -50,6 +50,9 @@ spécifier la table en utilisant la méthode ``table()``::
public function initialize(array $config)
{
+ $this->setTable('my_table');
+
+ // Avant 3.4.0
$this->table('my_table');
}
@@ -58,7 +61,7 @@ spécifier la table en utilisant la méthode ``table()``::
Aucune convention d'inflection ne sera appliquée quand on spécifie une table.
Par convention, l'ORM s'attend aussi à ce que chaque table ait une clé primaire
avec le nom de ``id``. Si vous avez besoin de modifier ceci, vous pouvez
-utiliser la méthode ``primaryKey()``::
+utiliser la méthode ``setPrimaryKey()``::
namespace App\Model\Table;
@@ -68,6 +71,9 @@ utiliser la méthode ``primaryKey()``::
{
public function initialize(array $config)
{
+ $this->setPrimaryKey('my_id');
+
+ // Avant 3.4.0
$this->primaryKey('my_id');
}
}
@@ -81,12 +87,15 @@ conventions de nommage. Par exemple, si votre classe de table est appelée
``ArticlesTable`` l'entity sera ``Article``. Si la classe table est
``PurchaseOrdersTable`` l'entity sera ``PurchaseOrder``. Cependant si vous
souhaitez utiliser une entity qui ne suit pas les conventions, vous pouvez
-utiliser la méthode ``entityClass()`` pour changer les choses::
+utiliser la méthode ``setEntityClass()`` pour changer les choses::
class PurchaseOrdersTable extends Table
{
public function initialize(array $config)
{
+ $this->setEntityClass('App\Model\Entity\PO');
+
+ // Avant 3.4.0
$this->entityClass('App\Model\Entity\PO');
}
}
diff --git a/fr/views/json-and-xml-views.rst b/fr/views/json-and-xml-views.rst
index 7aa6c6109a..745b59bd80 100644
--- a/fr/views/json-and-xml-views.rst
+++ b/fr/views/json-and-xml-views.rst
@@ -172,6 +172,14 @@ personnaliser le masque utilisé pour générer le JSON. Regardez la
documentation `json_encode `_ sur les valeurs
valides de cette option.
+Par exemple, pour serializer le rendu des erreurs de validation des entités de
+CakePHP de manière cohérente, vous pouvez le faire de la manière suivante::
+
+ // Dans l'action de votre controller, quand une sauvegarde échoue
+ $this->set('errors', $articles->errors());
+ $this->set('_jsonOptions', JSON_FORCE_OBJECT);
+ $this->set('_serialize', ['errors']);
+
Réponse JSONP
-------------