@@ -205,42 +205,6 @@ Then, define the trigger date/time using the same syntax as the
205205
206206 Since version 6.4, it is now possible to add and define a timezone as a 3rd argument.
207207
208- Another way of declaring cron triggers is to use the
209- :class: `Symfony\\ Component\\ Scheduler\\ Attribute\\ AsCronTask ` attribute
210- on an invokable class::
211-
212- // src/Scheduler/Task/SendDailySalesReports.php
213- namespace App\Scheduler\Task;
214-
215- use Symfony\Component\Scheduler\Attribute\AsCronTask;
216-
217- #[AsCronTask('0 0 * * *')]
218- class SendDailySalesReports
219- {
220- public function __invoke()
221- {
222- // ...
223- }
224- }
225-
226- This is the most basic way to define a cron trigger. However, the attribute
227- takes more parameters to customize the trigger::
228-
229- // adds randomly up to 6 seconds to the trigger time to avoid load spikes
230- #[AsCronTask('0 0 * * *', jitter: 6)]
231-
232- // defines the method name to call instead as well as the arguments to pass to it
233- #[AsCronTask('0 0 * * *', method: 'sendEmail', arguments: ['email' => 'admin@symfony.com'])]
234-
235- // defines the timezone to use
236- #[AsCronTask('0 0 * * *', timezone: 'Africa/Malabo')]
237-
238- .. versionadded :: 6.4
239-
240- The :class: `Symfony\\ Component\\ Scheduler\\ Attribute\\ AsCronTask ` attribute
241- was introduced in Symfony 6.4.
242-
243-
244208.. tip ::
245209
246210 Check out the `crontab.guru website `_ if you need help to construct/understand
@@ -258,6 +222,10 @@ For example::
258222
259223 RecurringMessage::cron('@daily', new Message());
260224
225+ .. tip ::
226+
227+ You can also define cron tasks using :ref: `the AsCronTask attribute <scheduler-attributes-cron-task >`.
228+
261229Hashed Cron Expressions
262230.......................
263231
@@ -321,54 +289,9 @@ defined by PHP datetime functions::
321289 $until = '2023-06-12';
322290 RecurringMessage::every('first Monday of next month', new Message(), $from, $until);
323291
324- Like cron triggers, you can also use the
325- :class: `Symfony\\ Component\\ Scheduler\\ Attribute\\ AsPeriodicTask ` attribute
326- on an invokable class::
327-
328- // src/Scheduler/Task/SendDailySalesReports.php
329- namespace App\Scheduler\Task;
330-
331- use Symfony\Component\Scheduler\Attribute\AsPeriodicTask;
332-
333- #[AsPeriodicTask(frequency: '1 day', from: '2022-01-01', until: '2023-06-12')]
334- class SendDailySalesReports
335- {
336- public function __invoke()
337- {
338- // ...
339- }
340- }
341-
342- .. note ::
343-
344- The ``from `` and ``until `` options are optional. If not defined, the task
345- will be executed indefinitely.
346-
347- The ``#[AsPeriodicTask] `` attribute takes many parameters to customize the trigger::
348-
349- // the frequency can be defined as an integer representing the number of seconds
350- #[AsPeriodicTask(frequency: 86400)]
351-
352- // adds randomly up to 6 seconds to the trigger time to avoid load spikes
353- #[AsPeriodicTask(frequency: '1 day', jitter: 6)]
354-
355- // defines the method name to call instead as well as the arguments to pass to it
356- #[AsPeriodicTask(frequency: '1 day', method: 'sendEmail', arguments: ['email' => 'admin@symfony.com'])]
357- class SendDailySalesReports
358- {
359- public function sendEmail(string $email): void
360- {
361- // ...
362- }
363- }
364-
365- // defines the timezone to use
366- #[AsPeriodicTask(frequency: '1 day', timezone: 'Africa/Malabo')]
367-
368- .. versionadded :: 6.4
292+ .. tip ::
369293
370- The :class: `Symfony\\ Component\\ Scheduler\\ Attribute\\ AsPeriodicTask ` attribute
371- was introduced in Symfony 6.4.
294+ You can also define periodic tasks using :ref: `the AsPeriodicTask attribute <scheduler-attributes-periodic-task >`.
372295
373296Custom Triggers
374297~~~~~~~~~~~~~~~
@@ -516,17 +439,94 @@ be used. Also, by default, the ``__invoke`` method of your service will be calle
516439but, it's also possible to specify the method to call via the ``method``option
517440and you can define arguments via ``arguments``option if necessary.
518441
519- The distinction between these two attributes lies in the trigger options:
442+ .. scheduler-attributes-cron-task::
443+
444+ ``AsCronTask `` Example
445+ ......................
446+
447+ This is the most basic way to define a cron trigger with this attribute::
448+
449+ // src/Scheduler/Task/SendDailySalesReports.php
450+ namespace App\Scheduler\Task;
451+
452+ use Symfony\Component\Scheduler\Attribute\AsCronTask;
453+
454+ #[AsCronTask('0 0 * * *')]
455+ class SendDailySalesReports
456+ {
457+ public function __invoke()
458+ {
459+ // ...
460+ }
461+ }
462+
463+ The attribute takes more parameters to customize the trigger::
520464
521- * :class:`Symfony\\Component\\Scheduler\\Attribute\\AsPeriodicTask` attribute
522- defines the following trigger options: ``frequencies ``, ``from ``, ``until `` and
523- ``jitter ``,
524- * :class: `Symfony\\ Component\\ Scheduler\\ Attribute\\ AsCronTask ` attribute
525- defines the following trigger options: ``expression ``, ``jitter ``.
465+ // adds randomly up to 6 seconds to the trigger time to avoid load spikes
466+ #[AsCronTask('0 0 * * *', jitter: 6)]
526467
527- By defining one of these two attributes, it enables the execution of your
528- service or command, considering all the options that have been specified within
529- the attributes.
468+ // defines the method name to call instead as well as the arguments to pass to it
469+ #[AsCronTask('0 0 * * *', method: 'sendEmail', arguments: ['email' => 'admin@example.com'])]
470+
471+ // defines the timezone to use
472+ #[AsCronTask('0 0 * * *', timezone: 'Africa/Malabo')]
473+
474+ .. versionadded :: 6.4
475+
476+ The :class: `Symfony\\ Component\\ Scheduler\\ Attribute\\ AsCronTask ` attribute
477+ was introduced in Symfony 6.4.
478+
479+ .. scheduler-attributes-periodic-task ::
480+
481+ ``AsPeriodicTask `` Example
482+ ..........................
483+
484+ This is the most basic way to define a periodic trigger with this attribute::
485+
486+ // src/Scheduler/Task/SendDailySalesReports.php
487+ namespace App\Scheduler\Task;
488+
489+ use Symfony\Component\Scheduler\Attribute\AsPeriodicTask;
490+
491+ #[AsPeriodicTask(frequency: '1 day', from: '2022-01-01', until: '2023-06-12')]
492+ class SendDailySalesReports
493+ {
494+ public function __invoke()
495+ {
496+ // ...
497+ }
498+ }
499+
500+ .. note ::
501+
502+ The ``from `` and ``until `` options are optional. If not defined, the task
503+ will be executed indefinitely.
504+
505+ The ``#[AsPeriodicTask] `` attribute takes many parameters to customize the trigger::
506+
507+ // the frequency can be defined as an integer representing the number of seconds
508+ #[AsPeriodicTask(frequency: 86400)]
509+
510+ // adds randomly up to 6 seconds to the trigger time to avoid load spikes
511+ #[AsPeriodicTask(frequency: '1 day', jitter: 6)]
512+
513+ // defines the method name to call instead as well as the arguments to pass to it
514+ #[AsPeriodicTask(frequency: '1 day', method: 'sendEmail', arguments: ['email' => 'admin@symfony.com'])]
515+ class SendDailySalesReports
516+ {
517+ public function sendEmail(string $email): void
518+ {
519+ // ...
520+ }
521+ }
522+
523+ // defines the timezone to use
524+ #[AsPeriodicTask(frequency: '1 day', timezone: 'Africa/Malabo')]
525+
526+ .. versionadded :: 6.4
527+
528+ The :class: `Symfony\\ Component\\ Scheduler\\ Attribute\\ AsPeriodicTask ` attribute
529+ was introduced in Symfony 6.4.
530530
531531Managing Scheduled Messages
532532---------------------------
0 commit comments