IdentifiantMot de passe
Loading...
Mot de passe oubli� ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les r�ponses en temps r�el, voter pour les messages, poser vos propres questions et recevoir la newsletter

Laravel PHP Discussion :

Cr�er un cron job


Sujet :

Laravel PHP

  1. #1
    Membre �clair� Avatar de legrandse
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    D�cembre 2010
    Messages
    354
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activit� : Responsable de service informatique

    Informations forums :
    Inscription : D�cembre 2010
    Messages : 354
    Par d�faut Cr�er un cron job
    Bonjour � tous,


    J'essaye en vain d'ex�cuter une t�che toutes les 2 minutes.
    La t�che consiste � appeler une m�thode d'un controlleur : IcalControlleur@read

    J'ai donc cr�� une commande dans laquelle j'appelle le controlleur :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    namespace App\Console\Commands;
    
    use Illuminate\Console\Command;
    use App\Http\Controllers\IcalController;
    
    class RetrieveIcal extends Command
    {
        /**
         * The name and signature of the console command.
         *
         * @var string
         */
        protected $signature = 'command:name';
    
        /**
         * The console command description.
         *
         * @var string
         */
        protected $description = 'Command description';
    
        /**
         * Execute the console command.
         *
         * @return int
         */
        public function handle()
        {
    		$task = new IcalController();
    		$task->read();
        	
            return Command::SUCCESS;
        }
    }

    Et je fais appel � son ex�cution :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    namespace App\Console;
    
    use Illuminate\Console\Scheduling\Schedule;
    use Illuminate\Foundation\Console\Kernel as ConsoleKernel;
    
    
    
    class Kernel extends ConsoleKernel
    {
        /**
         * The Artisan commands provided by your application.
         *
         * @var array
         */
        protected $commands = [
            //
        ];
    
        /**
         * Define the application's command schedule.
         *
         * @param  \Illuminate\Console\Scheduling\Schedule  $schedule
         * @return void
         */
        protected function schedule(Schedule $schedule)
        {
            
     $schedule->command('retrieveIcal')
                ->everyTwoMinutes();
         
        }
            
        
    
        /**
         * Register the commands for the application.
         *
         * @return void
         */
        protected function commands()
        {
            $this->load(__DIR__.'/Commands');
    
            require base_path('routes/console.php');
        }
    }

    Du coup j'ai un Fail de la t�che mais je ne sais pas ce qui ne fonctionne pas :
    Nom : Capture.PNG
Affichages : 568
Taille : 32,4 Ko

    Juste pour info le d�tail du controlleur :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
     
    <?php
     
    namespace App\Http\Controllers;
     
    use Illuminate\Http\Request;
    use Illuminate\Support\Facades\DB;
     
    use Rogervila\ArrayDiffMultidimensional;
    use ICal\ICal;
    use App\Booking;
    use App\House;
    use App\HouseLinked;
     
    class IcalController extends Controller
    {
     
     
        public function read() {
        	//Récupère toutes les maisons
        	$house = House::all();
     
     
        	foreach($house as $houses){
     
        		//récupère les agences qui gèrent les maisons concernées et disposent d'un import ICAL
    			$agency = HouseLinked::managedHouses($houses->id) //retrieve managed houses by agencies
    	    						  ->where('import','!=',null) 
    	    						  //->where('agency_id',9)
    	    						  ->get();
     
     
    	    	foreach($agency as $agencies){
     
     
    						$ical = new ICal($agencies->import, array(
    					        'defaultSpan'                 => 2,     // Default value
    					        'defaultTimeZone'             => 'UTC',
    					        'defaultWeekStart'            => 'MO',  // Default value
    					        'disableCharacterReplacement' => false, // Default value
    					        'filterDaysAfter'             => null,  // Default value
    					        'filterDaysBefore'            => null,  // Default value
    					        'httpUserAgent'               => null,  // Default value
    					        'skipRecurrence'              => false, // Default value
    						    ));
    				    $events = $ical->eventsFromInterval('1 year');
     
    				   //events from ICAL
    				   //place les events dans un array en vue d'une comparaison
    						$a = array();
    						foreach ($events as $key => $event) {
    								$dtstart = $ical->iCalDateToDateTime($event->dtstart_array[3]);
    								$dtend = $ical->iCalDateToDateTime($event->dtend_array[3]);
    								$created = $ical->iCalDateToDateTime($event->created);
     
    				                $a[$created->format('Y-m-d H:i:s')] = [ //l'ID de l'array est un DateTime
    				                'start' => $dtstart->format('Y-m-d'),
    				                'end' => $dtend->format('Y-m-d'),
    				                'created' => $created->format('Y-m-d H:i:s'),
     
    				                ];
     
     
    						}
    						ksort($a); //trie l'array par ordre décroissant
     
     
    						//events already present in BDD
    						$data = Booking::select('arrival', 'departure','created_at')				
    							->where('house_id',$agencies->house_id)
    							->where('agency_id',$agencies->agency_id)
    							->orderBy('created_at', 'ASC')
    							->get()->toArray();
     
     
    						//place les events de la BDD dans un array en vue d'une comparaison
    						$b= array();	
    						foreach($data as $key=> $v){
    							$created = date('Y-m-d H:i:s',strtotime($v['created_at']));
     
    							$b[$created] = [ //l'ID de l'array est un DateTime
    							'start' => $v['arrival'],
    							'end' => $v['departure'],
    							'created' => $created,
    							];
    						}
    						ksort($b); //trie l'array par ordre décroissant
     
    				//dd($a,$b);
    				$insert = ArrayDiffMultidimensional::compare($a, $b);
    				//dd($insert);
    				$delete = 	ArrayDiffMultidimensional::compare($b, $a);
    				//dd($a,$b,$insert,$delete);	
     
     
     
     
    						foreach($insert as $key => $value){
     
     
    								Booking::updateOrCreate([
    								'arrival'=> $value['start'],
    								'departure' => $value['end'],
    								'house_id' => $agencies->house_id,
    								'agency_id' => $agencies->agency_id,
    								'status_id' => 2,
    								'event_id' => 1,
    								'customer_id'=> 1,
    								'created_at' => $value['created'],
     
    								]);
     
    						}
     
    						foreach($delete as $key => $value){
    								Booking::where('arrival',$value['start'])
    									->where('departure', $value['end'])
    									->where('house_id',$agencies->house_id)
    									->where('agency_id',$agencies->agency_id)
    									->delete();
     
     
    						}
     
     
        		}
     
     
        	}
     
        }
     
    }





    En vous remerciant pour l'aide

  2. #2
    Mod�rateur
    Avatar de grunk
    Homme Profil pro
    Lead d�v - Architecte
    Inscrit en
    Ao�t 2003
    Messages
    6 693
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 41
    Localisation : France, C�te d'Or (Bourgogne)

    Informations professionnelles :
    Activit� : Lead d�v - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Ao�t 2003
    Messages : 6 693
    Par d�faut
    Un controller attends une requ�te http.

    Si tu veux executer tout ou partie du code de la m�thode read il faut la mettre ailleurs Par exemple dans App\Console\Kernel
    Tu ne peux pas simplement instancier le controller comme tu le fais

    Plus de d�tail ici : https://laravel.com/docs/9.x/scheduling
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre �clair� Avatar de legrandse
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    D�cembre 2010
    Messages
    354
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activit� : Responsable de service informatique

    Informations forums :
    Inscription : D�cembre 2010
    Messages : 354
    Par d�faut
    Merci pour la pr�cision.

    En effet, j'ai plac� le code directement comme ceci :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
     
     
     $schedule->call( function () {
    $house = House::all();
    etc...
     
    })->everyTwoMinutes();
    C� fonctionne bien

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. Cr�er un nouveau cron job via un script
    Par BEEP-BEEP dans le forum Shell et commandes GNU
    R�ponses: 29
    Dernier message: 06/09/2020, 13h41
  2. Cr�er des CRON ?
    Par Seb33300 dans le forum MS SQL Server
    R�ponses: 4
    Dernier message: 15/12/2008, 12h21
  3. [Quartz] Cron Job qui tourne en boucle
    Par K-Ka� dans le forum API standards et tierces
    R�ponses: 1
    Dernier message: 07/02/2008, 11h19
  4. Cron job sur un Pack perso confort 1&1 ?
    Par yazerty dans le forum EDI, CMS, Outils, Scripts et API
    R�ponses: 5
    Dernier message: 25/09/2007, 18h16

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo