Bonjour,

J'ai un petit souci concernant un projet sous symfony

je dois activer des dates en fonction d'une date préalablement définit lors de la saisie, par exemple 2018/12/01
Ensuite lors de cette activation j'aimerai activer 6 dates se trouvant dans une entité, chacune avec un décalage de 1 mois, c'est à dire
la 1ère sera automatiquement le 2019/01/01 la suivante 2019/02/01 ainsi de suite. J'ai pensé à un evenement postpersist de l'objet que
j'ai eu à soumettre quand j'ai saisi la date celui aura un evenement postpersist qui activera automatique les 6 date dans un autre objet .
Maintenant lorsque la date en question par exemple 2019/02/01 est arrivé ou dépassé on doit lancer une alerte soit par mail ou par
une entité notification .
Ma question est comment déclencher ce genre de processus dans mon application qui va verifier chaque date en question
de mon entitié qui est arrivé à echeance afin que je lance une alerte à l'administrateur.

Merci de votre aide

10 réponses


Digivia
Réponse acceptée

Bonjour Stone,

Il te faut donc une tâche planifiée qui exécute un traitement à intervalle régulier...
Symfony Console est ton amie : https://symfony.com/doc/current/console.html
Le principe est le même que lorsque tu vides le cache par exemple : php bin/console cache:clear
Tu auras par exemple php bin/console monapp:monaction
L'avantage étant que ton traitement console sera déconnecté de l'exécution d'un page web (traitement séparé donc pas d'attente pour ton visiteur).
Tu devs ton app console, ensuite tu l'executes par le biais d'une tâche cron (linux) ou tâche planifiée (windows).
En espérant t'avoir aidé.

guilfred
Auteur
Réponse acceptée

Merci @ricco42 si je comprends bien il faut en fait créer un script php qui va lire mes dates dans la base de données et ensuite les verifier si celles ci sont dépassé mais je ne comprends l'utilité de symfony console pourrais tu m'eclaicir si possible

guilfred
Auteur
Réponse acceptée

Et aussi la tache cron ira -t- elle directement lire un fichier symfony de mon application par exemple etant en mode développement sous windows avec xampp

Digivia
Réponse acceptée

Oui le principe est bien de créer un script qui va scroller les entités et leur date et réaliser un traitement en conséquence (mail à l'admin par exemple). La console te permet de creer une "app" de type console ou tu as accès à tout l'environnement symfony (SwiftMail, Container, etc.), ainsi que les format de sortie d'un mode console (affichage d'une progress bar dans la console, messages de couleur,etc). De plus, tu peux demander des paramètres d'entrée, et même bloquer la double exécution de ton traitement (via le LockableTrait), ce qui peut être pratique pour ne pas lancer deux fois le traitement en même temps (risque de collision). Bref, c'est l'outil qui est fait pour des traitement asynchrones, et qui est parfaitement adapté pour ton besoin...

guilfred
Auteur
Réponse acceptée

Merci ricco42, c'est sympa de ta part je vais me pencher là dessus

Digivia
Réponse acceptée

Pour la tâche planifiée, il faudra simplement créer une tâche avec le planificateur de tâche qui ira exécuter par exemple:

php c:/xampp/myproject/bin/console myapp:mycommand

pour définir myapp:mycommand, il y a une fonction qui permet de le faire dans ton script console :

protected function configure()
    {
        // Name and description for app/console command
        $this
            ->setName('myapp:checkdate')
            ->setDescription('Va vérifier les dates de mon entité')
            ->addOption(
                'entity',
                'e',
                InputOption::VALUE_REQUIRED,
                'De quelle entité voulez-vous vérifier la date',
                $this->myEntity)
    }

Pour l'appel :

php bin/console myapp:checkdate --entity="AppBundle:MyEntity"

Dans cet exemple, tu passerais en paramètre le nom d'une entité de laquelle tu souhaites vérifier la date... C'est pour l'exemple et te montrer que c'est super flexible ;)

guilfred
Auteur
Réponse acceptée

Donc si je comprends bien le role de l'utilisation de la commande est de planifier les taches une fois que je lance cette commande elle va par exemple verfier les dates qui sont écoulées mais je dois chaque fois
lancer cette commande ou seulement faire cela une seule fois pour que le client qui utilise mon application puisse recevoir des alertes sans avoir à lancer toutes les fois cette commande.

guilfred
Auteur
Réponse acceptée

j'ai compris maintenant en fait ce que je désire c'est la commande qui va la faire et la commande va etre lié à la tache cron je vois

Digivia
Réponse acceptée

C'est exactement ça, le cron va déclencher la commande symfony ;)

guilfred
Auteur
Réponse acceptée

Merci ricco42 pour ton aide