From 6260bd28cfa9c1d490fa1954a4f53b86f1d64551 Mon Sep 17 00:00:00 2001 From: Yves P Date: Thu, 15 Jun 2017 21:49:50 +0200 Subject: [PATCH 1/8] [fr] Follows #4755 --- fr/orm/table-objects.rst | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) 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'); } } From f0d10e76c4f36022c332fb2b07b2fb8620469455 Mon Sep 17 00:00:00 2001 From: Yves P Date: Thu, 15 Jun 2017 21:56:40 +0200 Subject: [PATCH 2/8] [fr] Follows #4762 --- fr/installation.rst | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) 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 =========== From d3c4d43ed3cee19116770e044f285680f7965d31 Mon Sep 17 00:00:00 2001 From: Yves P Date: Thu, 15 Jun 2017 22:05:13 +0200 Subject: [PATCH 3/8] [fr] Follows #4746 / #4771 --- fr/controllers/request-response.rst | 65 +++++++++++++++++++++++++++++ 1 file changed, 65 insertions(+) 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 ------------------------ From affa11442dcbc90bd1c3bc78dfc96f7122e21565 Mon Sep 17 00:00:00 2001 From: Yves P Date: Thu, 15 Jun 2017 22:14:11 +0200 Subject: [PATCH 4/8] [fr] Follows #4773 --- fr/core-libraries/email.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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'``. From 97d8ddc395aab726aa609a67707c1fe694379efa Mon Sep 17 00:00:00 2001 From: Yves P Date: Thu, 15 Jun 2017 22:19:02 +0200 Subject: [PATCH 5/8] [fr] Follows #4777 --- fr/views/json-and-xml-views.rst | 8 ++++++++ 1 file changed, 8 insertions(+) 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 ------------- From 9f87fc40005f564f90274579e9a36c19221baf07 Mon Sep 17 00:00:00 2001 From: Yves P Date: Thu, 15 Jun 2017 22:32:00 +0200 Subject: [PATCH 6/8] [fr] Add missing translations to development/configuration.rst --- en/development/configuration.rst | 1 - fr/development/configuration.rst | 88 +++++++++++++++++--------------- 2 files changed, 46 insertions(+), 43 deletions(-) diff --git a/en/development/configuration.rst b/en/development/configuration.rst index 4b93868d8a..75ff9bdbce 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 ======================== diff --git a/fr/development/configuration.rst b/fr/development/configuration.rst index 03a02c03c8..d5aa412956 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 fonction 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,53 +663,56 @@ 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 facile 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. .. meta:: :title lang=fr: Configuration From 15acd0c0d0fad77a3c95257900a138fa33e0a893 Mon Sep 17 00:00:00 2001 From: Yves P Date: Thu, 15 Jun 2017 22:36:51 +0200 Subject: [PATCH 7/8] [fr] Follows #4779 --- en/development/configuration.rst | 2 +- fr/development/configuration.rst | 32 +++++++++++++++++++++++++++++++- 2 files changed, 32 insertions(+), 2 deletions(-) diff --git a/en/development/configuration.rst b/en/development/configuration.rst index 75ff9bdbce..c344c475f6 100644 --- a/en/development/configuration.rst +++ b/en/development/configuration.rst @@ -690,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/development/configuration.rst b/fr/development/configuration.rst index d5aa412956..0c1df75dea 100755 --- a/fr/development/configuration.rst +++ b/fr/development/configuration.rst @@ -714,6 +714,36 @@ 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 causer 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 From f1ac8a0131002980e1a6d0c84232f77ceac170dd Mon Sep 17 00:00:00 2001 From: antograssiot Date: Fri, 16 Jun 2017 05:57:34 +0200 Subject: [PATCH 8/8] Fix some errors --- fr/development/configuration.rst | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/fr/development/configuration.rst b/fr/development/configuration.rst index 0c1df75dea..4a61b4f238 100755 --- a/fr/development/configuration.rst +++ b/fr/development/configuration.rst @@ -638,7 +638,7 @@ courantes: - Configurer les inflections personnalisées. - Charger les fichiers de configuration. -Il pourrait être tentant de placer des fonction de formatage ici pour les +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. @@ -672,7 +672,7 @@ initialiser des plugins et attacher des écouteurs d'événements globaux:: } Charger les plugins et les événements dans ``Application::bootstrap()`` rend -les :ref:`integration-testing` plus facile car les événements et les routes +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 @@ -723,7 +723,7 @@ 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 causer par les auto-tables, vous +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::