diff --git a/en/console-and-shells/cron-jobs.rst b/en/console-and-shells/cron-jobs.rst index 000a264e19..174bc13212 100644 --- a/en/console-and-shells/cron-jobs.rst +++ b/en/console-and-shells/cron-jobs.rst @@ -26,16 +26,17 @@ Cron Jobs on Shared Hosting --------------------------- On some shared hostings ``cd /full/path/to/root && bin/cake myshell myparam`` -might not work. Instead you can use ``php /full/path/to/root/bin/cake.php -myshell myparam``. +might not work. Instead you can use +``php /full/path/to/root/bin/cake.php myshell myparam``. .. note:: - register_argc_argv has to be turned on by including ``register_argc_argv - = 1`` in your php.ini. If you cannot change register_argc_argv globally, - you can tell the cron job to use your own configuration file (php.ini) by - specifying it with ``-c /full/path/to/root/php.ini``. Example: ``php -c - /full/path/to/root/php.ini /full/path/to/root/bin/cake.php myshell - myparam`` + + register_argc_argv has to be turned on by including ``register_argc_argv + = 1`` in your php.ini. If you cannot change register_argc_argv globally, + you can tell the cron job to use your own configuration file (php.ini) by + specifying it with ``-c /full/path/to/root/php.ini``. Example: ``php -c + /full/path/to/root/php.ini /full/path/to/root/bin/cake.php myshell + myparam`` .. meta:: :title lang=en: Running Shells as cronjobs diff --git a/en/development/testing.rst b/en/development/testing.rst index 8304001c2c..717a4261e5 100644 --- a/en/development/testing.rst +++ b/en/development/testing.rst @@ -1098,7 +1098,8 @@ helper methods for interacting with encrypted cookies in your test cases:: $this->assertCookieEncrypted('An updated value', 'my_cookie'); -.. versionadded: 3.1.7 +.. versionadded:: 3.1.7 + ``assertCookieEncrypted`` and ``cookieEncrypted`` were added in 3.1.7. Testing Flash Messages diff --git a/en/orm/validation.rst b/en/orm/validation.rst index b6aceb8d4b..0cc813d222 100644 --- a/en/orm/validation.rst +++ b/en/orm/validation.rst @@ -410,7 +410,7 @@ to exist as ``NULL`` is not equal to itself. While, allowing multiple null values is the default behavior of CakePHP, you can include null values in your unique checks using ``allowMultipleNulls``:: - // Only only null value can exist in `parent_id` and `site_id` + // Only one null value can exist in `parent_id` and `site_id` $rules->add($rules->existsIn( ['parent_id', 'site_id'], 'ParentNodes', diff --git a/fr/console-and-shells/cron-jobs.rst b/fr/console-and-shells/cron-jobs.rst index 86fb013f0b..d9a8f7e626 100644 --- a/fr/console-and-shells/cron-jobs.rst +++ b/fr/console-and-shells/cron-jobs.rst @@ -23,6 +23,22 @@ Vous pouvez avoir plus d'infos ici: http://fr.wikipedia.org/wiki/Cron Utilisez ``-q`` (or `--quiet`) pour ne pas afficher de sortie pour les cronjobs. +Tâches Cron sur des serveurs mutualisés +--------------------------------------- + +Sur certains serveurs mutualisés ``cd /full/path/to/root && bin/cake myshell myparam`` +pourrait ne pas fonctionner. Vous pouvez à la place utiliser +``php /full/path/to/root/bin/cake.php myshell myparam``. + +.. note:: + + register_argc_argv a besoin d'être activé en incluant + ``register_argc_argv = 1`` dans votre php.ini. Si vous ne pouvez pas + changer register_argc_argv de manière globale, vous pouvez préciser à la + tâche cron d'utiliser votre propre php.ini en le spécifiant via + ``-c /full/path/to/root/php.ini``. Exemple : + ``php -c /full/path/to/root/php.ini /full/path/to/root/bin/cake.php myshell myparam``. + .. meta:: :title lang=fr: Lancer des Shells en tant que cronjobs :keywords lang=fr: tâche cron,cronjob,crontab diff --git a/fr/controllers.rst b/fr/controllers.rst index cd830f5f1c..a266cf85d1 100644 --- a/fr/controllers.rst +++ b/fr/controllers.rst @@ -143,7 +143,7 @@ manuellement. Au lieu de ça, une fois qu'une action du controller est terminée CakePHP va gérer le rendu et la livraison de la Vue. Si pour certaines raisons, vous voulez éviter le comportement par défaut, vous -pouvez retourner un objet de :php:class:`Cake\\Network\\Response` de l'action +pouvez retourner un objet de :php:class:`Cake\\Http\\Response` de l'action avec la response complètement créée. Afin que vous utilisiez efficacement le controller dans votre propre diff --git a/fr/controllers/components/csrf.rst b/fr/controllers/components/csrf.rst index af267698f4..7c03c2349c 100644 --- a/fr/controllers/components/csrf.rst +++ b/fr/controllers/components/csrf.rst @@ -20,7 +20,7 @@ deux valeurs ne correspondent pas, le component lancera une .. note:: Vous devez toujours vérifier les méthodes HTTP utilisées avant d'exécuter d'autre code. Vous devez :ref:`vérifier la méthode HTTP ` - ou utiliser :php:meth:`Cake\\Network\\Request::allowMethod()` pour vous + ou utiliser :php:meth:`Cake\\Http\\ServerRequest::allowMethod()` pour vous assurer que la bonne méthode HTTP est utilisée. .. versionadded:: 3.1 diff --git a/fr/controllers/components/security.rst b/fr/controllers/components/security.rst index 33bbb50548..73beee20df 100644 --- a/fr/controllers/components/security.rst +++ b/fr/controllers/components/security.rst @@ -43,7 +43,7 @@ avant ces components dans la méthode ``initialize()``. Vous devez toujours vérifier les méthodes HTTP utilisées avant d'exécuter d'autre code. Vous devez :ref:`vérifier la méthode HTTP ` - ou utiliser :php:meth:`Cake\\Network\\Request::allowMethod()` pour vous + ou utiliser :php:meth:`Cake\\Http\\ServerRequest::allowMethod()` pour vous assurer que la bonne méthode HTTP est utilisée. Gestion des callbacks Blackhole diff --git a/fr/core-libraries/email.rst b/fr/core-libraries/email.rst index 4ed72d1d80..4ebc28213b 100644 --- a/fr/core-libraries/email.rst +++ b/fr/core-libraries/email.rst @@ -222,7 +222,7 @@ sont utilisées: ``Email::theme()``. - ``'layout'``: Si vous utilisez un contenu rendu, définissez le layout à rendre. Si vous voulez rendre un template sans layout, définissez ce champ - à null. Regardez ``Email::layout()``. + à null. Regardez ``Email::template()``. - ``'viewVars'``: Si vous utilisez un contenu rendu, définissez le tableau avec les variables devant être rendus dans la vue. Regardez ``Email::viewVars()``. @@ -272,8 +272,7 @@ templates normales:: $email = new Email(); $email - ->template('welcome') - ->layout('fancy') + ->template('welcome', 'fancy') ->emailFormat('html') ->to('bob@example.com') ->from('app@domain.com') @@ -285,8 +284,7 @@ aussi envoyer des messages email templaté multipart:: $email = new Email(); $email - ->template('welcome') - ->layout('fancy') + ->template('welcome', 'fancy') ->emailFormat('both') ->to('bob@example.com') ->from('app@domain.com') @@ -325,8 +323,7 @@ Si vous voulez envoyer un email en utilisant templates dans un plugin, vous pouvez utiliser la :term:`syntaxe de plugin` familière pour le faire:: $email = new Email(); - $email->template('Blog.new_comment'); - $email->layout('Blog.auto_message'); + $email->template('Blog.new_comment', 'Blog.auto_message'); Ce qui est au-dessus utiliserait les templates à partir d'un plugin de Blog par exemple. @@ -336,8 +333,7 @@ les plugins. Vous pouvez faire ceci en utilisant les themes en disant à Email d'utiliser le bon theme en utilisant la méthode ``Email::theme()``:: $email = new Email(); - $email->template('Blog.new_comment'); - $email->layout('Blog.auto_message'); + $email->template('Blog.new_comment', 'Blog.auto_message'); $email->theme('TestTheme'); Ceci vous permet de remplacer le template `new_comment` dans votre theme sans @@ -347,8 +343,8 @@ chemin suivant: .. deprecated:: 3.4.0 Utilisez ``setTemplate()`` à la place de ``template()``. Utilisez - ``setLayout()`` à la place de ``layout()``. Utilisez ``setTheme()`` à la - place de ``theme()``. + ``setLayout()`` à la place de l'argument layout de ``template(). + Utilisez ``setTheme()`` à la place de ``theme()``. Envoyer les pièces jointes @@ -556,8 +552,7 @@ aux utilisateurs. Pour créer votre ``UserMailer``, créez un fichier $this ->to($user->email) ->subject(sprintf('Welcome %s', $user->name)) - ->template('welcome_mail') // Par défaut le template avec le même nom que le nom de la méthode est utilisé. - ->layout('custom'); + ->template('welcome_mail', 'custom'); // Par défaut le template avec le même nom que le nom de la méthode est utilisé. } public function resetPassword($user) diff --git a/fr/core-libraries/httpclient.rst b/fr/core-libraries/httpclient.rst index 1aa7138610..f17e5e0e7e 100644 --- a/fr/core-libraries/httpclient.rst +++ b/fr/core-libraries/httpclient.rst @@ -18,7 +18,7 @@ Faire des Requêtes Faire des requêtes est simple et direct. Faire une requête GET ressemble à ceci:: - use Cake\Network\Http\Client; + use Cake\Http\Client; $http = new Client(); @@ -93,10 +93,10 @@ Construire des Corps de Requête Multipart à la Main Il peut arriver que vous souhaitiez construire un corps de requête d'une façon très spécifique. Dans ces situations, vous pouvez utiliser -``Cake\Network\Http\FormData`` pour fabriquer la requête HTTP multipart +``Cake\Http\Client\FormData`` pour fabriquer la requête HTTP multipart spécifique que vous souhaitez:: - use Cake\Network\Http\FormData; + use Cake\Http\Client\FormData; $data = new FormData(); diff --git a/fr/development/dispatch-filters.rst b/fr/development/dispatch-filters.rst index 9e4361d762..dc65f82255 100644 --- a/fr/development/dispatch-filters.rst +++ b/fr/development/dispatch-filters.rst @@ -151,9 +151,9 @@ filtres de dispatcher suivent quelques conventions: sous-classes qui sont ``beforeDispatch()`` et ``afterDispatch()``. Ces méthodes sont exécutées respectivement avant et après l'exécution de tout controller. les deux méthodes reçoivent un objet :php:class:`Cake\\Event\\Event` contenant -les objets ``request`` et ``response`` -(instances de :php:class:`Cake\\Network\\Request` et -:php:class:`Cake\\Network\\Response`) dans la propriété ``data``. +les objets ``ServerRequest`` et ``Response`` +(instances de :php:class:`Cake\\Http\\ServerRequest` et +:php:class:`Cake\\Http\\Response`) dans la propriété ``data``. Alors que notre filtre était relativement simple, il y a quelques autres choses intéressantes que nous pouvons réaliser dans les méthodes de filtre. En diff --git a/fr/development/testing.rst b/fr/development/testing.rst index 109df42678..9b541236e4 100755 --- a/fr/development/testing.rst +++ b/fr/development/testing.rst @@ -1102,41 +1102,133 @@ bonnes variables d'environnement:: Les méthodes ``enableCsrfToken()`` et ``enableSecurityToken()`` ont été ajoutées dans la version 3.1.2. -Integration Testing PSR-7 Middleware ------------------------------------- +Test d'intégration sur les middlewares PSR-7 +-------------------------------------------- -Integration testing can also be used to test your entire PSR-7 application and -:doc:`/controllers/middleware`. By default ``IntegrationTestCase`` will -auto-detect the presence of an ``App\Application`` class and automatically -enable integration testing of your Application. You can toggle this behavior -with the ``useHttpServer()`` method:: +Les tests d'intégration peuvent aussi être utilisés pour tester entièrement vos +applications PSR-7 et les :doc:`/controllers/middleware`. Par défaut, +``IntegrationTestCase`` détectera automatiquement la présence d'une classe +``App\Application`` et activera automatiquement les tests d'intégration sur +votre Application. Vous pouvez activer / désactiver ce comportement avec la +méthode ``useHttpServer()``:: public function setUp() { - // Enable PSR-7 integration testing. + // Active les tests d'intégration PSR-7 $this->useHttpServer(true); - // Disable PSR-7 integration testing. + // Désactive les tests d'intégration PSR-7 $this->useHttpServer(false); } -You can customize the application class name used, and the constructor -arguments, by using the ``configApplication()`` method:: +Vous pouvez personnaliser le nom de la classe Application utilisé ainsi que les +arguments du contructeur en utilisant la méthode ``configApplication()``:: public function setUp() { $this->configApplication('App\App', [CONFIG]); } -After enabling the PSR-7 mode, and possibly configuring your application class, -you can use the remaining ``IntegrationTestCase`` features as normal. +Après avoir activé le mode PSR-7 (et avoir peut-être configuré la classe +d'Application), vous pouvez utiliser le reste des fonctionnalités de +``IntegrationTestCase`` normalement. -You should also take care to try and use :ref:`application-bootstrap` to load -any plugins containing events/routes. Doing so will ensure that your -events/routes are connected for each test case. +Vous devriez également faire en sorte d'utiliser :ref:`application-bootstrap` +pour charger les plugins qui contiennent des événements et des routes. De cette +manière, vous vous assurez que les événements et les routes seront connectés pour +chacun de vos "test case". .. versionadded:: 3.3.0 - PSR-7 Middleware and the ``useHttpServer()`` method were added in 3.3.0. + Les Middleware PSR-7 et la méthode ``useHttpServer()`` ont été ajoutée avec 3.3.0. + +Tester avec des cookies chiffrés +-------------------------------- + +Si vous utilisez le :php:class:`Cake\\Controller\\Component\\CookieComponent` +dans vos controllers, vos cookies sont probablement chiffrés. Depuis 3.1.7, +CakePHP met à votre disposition des méthodes pour intéragir avec les cookies +chiffrés dans vos "test cases":: + + // Définit un cookie en utilisant AES et la clé par défaut. + $this->cookieEncrypted('my_cookie', 'Some secret values'); + + // Partons du principe que cette requête modifie le cookie. + $this->get('/bookmarks/index'); + + $this->assertCookieEncrypted('An updated value', 'my_cookie'); + +.. versionadded:: 3.1.7 + + ``assertCookieEncrypted`` et ``cookieEncrypted`` ont été ajoutées dans 3.1.7. + +Tester les Messages Flash +------------------------- + +Si vous souhaitez faire une assertion sur la présence de messages Flash en +session et pas sur le rendu du HTML, vous pouvez utiliser ``enableRetainFlashMessages()`` +dans vos tests pour que les messages Flash soient conservés dans la session +pour que vous puissez écrire vos assertions:: + + $this->enableRetainFlashMessages(); + $this->get('/bookmarks/delete/9999'); + + $this->assertSession('That bookmark does not exist', 'Flash.flash.0.message'); + +.. versionadded:: 3.4.7 + + ``enableRetainFlashMessages()`` a été ajoutée dans 3.4.7 + +Tester un controller retournant du JSON +--------------------------------------- + +JSON est un format commun lors de la conception de web service. Tester les +endpoints de votre web service est très simple avec CakePHP. Commençons avec +un exemple simple de controller qui renvoie du JSON:: + + class MarkersController extends AppController + { + public function initialize() + { + parent::initialize(); + $this->loadComponent('RequestHandler'); + } + + public function view($id) + { + $marker = $this->Markers->get($id); + $this->set([ + '_serialize' => ['marker'], + 'marker' => $marker, + ]); + } + } + +Créons maintenant le fichier **tests/TestCase/Controller/MarkersControllerTest.php** +et assurons-nous que le web service répond correctement:: + + class MarkersControllerTest extends IntegrationTestCase + { + + public function testGet() + { + $this->configRequest([ + 'headers' => ['Accept' => 'application/json'] + ]); + $result = $this->get('/markers/view/1.json'); + + // Vérification que la réponse était bien une 200 + $this->assertResponseOk(); + + $expected = [ + ['id' => 1, 'lng' => 66, 'lat' => 45], + ]; + $expected = json_encode($expected, JSON_PRETTY_PRINT); + $this->assertEquals($expected, $this->_response->body()); + } + } + +Nous utilisons l'option ``JSON_PRETTY_PRINT`` car la JsonView intégrée à CakePHP +utilise cette option quand le mode ``debug`` est activé. Méthodes d'Assertion -------------------- @@ -1406,8 +1498,8 @@ dans notre component. Nous créons le fichier use Cake\Controller\Controller; use Cake\Controller\ComponentRegistry; use Cake\Event\Event; - use Cake\Network\Request; - use Cake\Network\Response; + use Cake\Http\ServerRequest; + use Cake\Http\Response; use Cake\TestSuite\TestCase; class PagematronComponentTest extends TestCase @@ -1420,7 +1512,7 @@ dans notre component. Nous créons le fichier { parent::setUp(); // Configuration de notre component et de notre faux controller de test. - $request = new Request(); + $request = new ServerRequest(); $response = new Response(); $this->controller = $this->getMockBuilder('Cake\Controller\Controller') ->setConstructorArgs([$request, $response]) diff --git a/fr/orm/database-basics.rst b/fr/orm/database-basics.rst index f744a8c210..108a3be80f 100644 --- a/fr/orm/database-basics.rst +++ b/fr/orm/database-basics.rst @@ -469,12 +469,12 @@ Vous pouvez utiliser les types personnalisés créés en faisant la correspondan des types dans la :ref:`méthode _initializeSchema() ` de votre Table:: - use Cake\Database\Schema\Table as Schema; + use Cake\Database\Schema\TableSchema; class WidgetsTable extends Table { - protected function _initializeSchema(Schema $schema) + protected function _initializeSchema(TableSchema $schema) { $schema->columnType('widget_prefs', 'json'); diff --git a/fr/orm/entities.rst b/fr/orm/entities.rst index 8921b1c8a2..f421a6bc19 100644 --- a/fr/orm/entities.rst +++ b/fr/orm/entities.rst @@ -166,8 +166,7 @@ get() et set(). Par exemple:: protected function _setTitle($title) { - $this->set('slug', Text::slug($title)); - return $title; + return Text::slug($title); } } diff --git a/fr/orm/saving-data.rst b/fr/orm/saving-data.rst index 52b689e61f..068815887b 100644 --- a/fr/orm/saving-data.rst +++ b/fr/orm/saving-data.rst @@ -1157,12 +1157,12 @@ construire les Types de colonne personnalisés:: Type::map('json', 'Cake\Database\Type\JsonType'); // Dans src/Model/Table/UsersTable.php - use Cake\Database\Schema\Table as Schema; + use Cake\Database\Schema\TableSchema; class UsersTable extends Table { - protected function _initializeSchema(Schema $schema) + protected function _initializeSchema(TableSchema $schema) { $schema->columnType('preferences', 'json'); return $schema; diff --git a/fr/orm/validation.rst b/fr/orm/validation.rst index f1d7d04733..7950564003 100644 --- a/fr/orm/validation.rst +++ b/fr/orm/validation.rst @@ -408,20 +408,35 @@ parti de la clé primaire. Vous pouvez forcer ``existsIn`` à passer quand des parties qui peuvent être nulles de votre clé étrangère composite sont nulles:: - // Example: A composite primary key within NodesTable is (id, site_id). - // A Node may reference a parent Node but does not need to. In latter case, parent_id is null. - // Allow this rule to pass, even if fields that are nullable, like parent_id, are null: + // Example: Une clé primaire composée dans NodesTable est (id, site_id). + // Un "Node" peut faire référence à un parent Node mais ce n'est pas obligatoire. + // Dans un cas d'utilisation, parent_id est null. + // Nous permettons à cette règle de passer, même si les champs qui sont nullable, comme + // parent_id, sont null : $rules->add($rules->existsIn( ['parent_id', 'site_id'], // Schema: parent_id NULL, site_id NOT NULL 'ParentNodes', ['allowNullableNulls' => true] )); - // A Node however must in addition also always reference a Site. + // Un Node doit cependant toujours avoir une référence à un Site. $rules->add($rules->existsIn(['site_id'], 'Sites')); +Dans la majorité des bases de données SQL, les index ``UNIQUE`` sur plusieurs +colonnes permettent à plusieurs valeurs null d'exister car ``NULL`` n'est +pas égale à lui même. Même si autoriser plusieurs valeurs null est le comportement +par défaut de CakePHP, vous pouvez inclure des valeurs null dans vos validations +en utilisant ``allowMultipleNulls``:: + + // Seulement une valeur null peut exister dans `parent_id` et `site_id` + $rules->add($rules->existsIn( + ['parent_id', 'site_id'], + 'ParentNodes', + ['allowMultipleNulls' => false] + )); + .. versionadded:: 3.3.0 - L'option ``allowNullableNulls`` a été ajoutée. + Les options ``allowNullableNulls`` et ``allowMultipleNulls`` ont été ajoutées. Règles sur le Nombre de Valeurs d'une Association ------------------------------------------------- diff --git a/fr/tutorials-and-examples/blog/part-two.rst b/fr/tutorials-and-examples/blog/part-two.rst index 8acf1f0ad9..82c8ca7adc 100755 --- a/fr/tutorials-and-examples/blog/part-two.rst +++ b/fr/tutorials-and-examples/blog/part-two.rst @@ -337,7 +337,7 @@ Chaque requête de CakePHP contient un objet ``ServerRequest`` qui est accessibl en utilisant ``$this->request``. Cet objet contient des informations utiles sur la requête qui vient d'être reçue, et permet de contrôler les flux de votre application. Dans ce cas, nous utilisons la méthode -:php:meth:`Cake\\Network\\ServerRequest::is()` pour vérifier que la requête est de +:php:meth:`Cake\\Http\\ServerRequest::is()` pour vérifier que la requête est de type POST. Lorsqu'un utilisateur utilise un formulaire pour poster des données dans votre