2016-08-03 35 views
0

Ich muss mehrere Cron-Jobs einrichten. Jedes Cron wird eine separate Anfrage an den Server sein. Also, ich begann mit dem folgenden, wo jede Anfrage von einem Fall innerhalb der Schalter behandelt wird, aber die Fälle sind verpflichtet, zu erhöhen und scheint mir daher keine sehr gute Idee.Alternative für die Behandlung von Anfragen mit Switch-Anweisung

require_once './invoice_cron.php'; 

$checkRequest = isset($_REQUEST['request']); 

if($checkRequest) { 
    $request_name = $_REQUEST['request']; 
    switch($request_name) { 
     case 'send_invoice': 
      break; 
     default: 
      break; 
    } 
} 

Was könnte hier ein besserer Ansatz sein?

+1

Ich würde die Aktionen in separaten Dateien in einem Unterordner und dann 'include ("./Actions /".$ request_name. ". Php") '. – Bert

Antwort

0

Le t eine Request-Handler-Schnittstelle sein:

<?php 
    // CronRequests.php 

    require_once __DIR__.'./autoload.php'; 

    $request_name = isset($_REQUEST['request']) ? 
        (new _cron)->handler($_REQUEST['request']) : 
        null ; 

eine Klasse machen, dass jede Anforderung umgehen konnte:

class _cron { 

/** 
* List of possible requests 
* @var array 
*/ 
private static $REQUESTS = ['send_invoice','start_user_subscription']; 

/** 
* HTTP request handler for all cron jobs 
* @param string $request_name Name of the request 
*/ 
public function handler($request_name) { 
    $status = false; 
    if(isset($request_name)) { 
     $request_map = array_flip(self::$REQUESTS); 
     if(isset($request_map[$request_name])) { 
      $status = $this->$request_name(); 
     } 
    } 
    return $status; 
} 
} 

Die Liste der Anfragen zu erhöhen verpflichtet sind, so ist es notwendig, die Liste effizient zu durchsuchen. Also, hier machen wir einen Array-Flip und überprüfen einen Schlüssel auf Existenz.

0
  • für jede Anforderung Typ eine Funktion entsprechen
  • alle Arten von Anforderungen müssen im System definiert werden müssen, bevor die Verarbeitung
  • starten, wenn eine Anforderung nicht in der Liste enthalten ist => einige logische Antwort muss passieren

ich Ihnen nur einfaches Beispiel geben wird, können Sie es entwickeln

class Request{ 

    private $REQUEST_TYPES = ['get_invoice', 'set_invoice', 'print_invoice']; 

    public function handler($requestKey){ 
     foreach($this->REQUEST_TYPES as $type){ 
      if($requestKey == $type) $this->$type(); 
     } 
     $this->handlerNotFound(); 
    } 

    private function get_invoice(){ 
     //do some thing here 
    } 

    private function set_invoice(){ 
     //do some thing here 
    } 

    private function print_invoice(){ 
     //do some thing here 
    } 

    private function handlerNotFound(){ 
     //do some thing here 
    } 
}