2016-08-03 6 views
0

Мне нужно настроить несколько заданий cron. Каждый cron будет отдельным запросом к серверу. Итак, я начал с того, что каждый запрос обрабатывается случаем внутри коммутатора, но случаи неизбежно увеличиваются и, следовательно, мне не очень хорошая идея.Альтернатива для обработки запросов с использованием оператора switch

require_once './invoice_cron.php'; 

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

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

Что может быть лучшим подходом здесь?

+1

Я поместил действия в отдельные файлы в подпапку, а затем включил (. ./ actions /".$ request_name... Php ")'. – Bert

ответ

0

Le т ли интерфейс обработчика запроса:

<?php 
    // CronRequests.php 

    require_once __DIR__.'./autoload.php'; 

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

сделать класс, который может обрабатывать каждый запрос:

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; 
} 
} 

Список запросов неизбежно возрастет, так что необходимо для эффективного поиска в списке. Итак, здесь мы делаем флип массива и проверяем ключ для существования.

0
  • для каждого типа запроса должен соответствовать функции
  • всех типов запросов должен быть определен в системе, прежде чем начать обработку
  • если запрос не в списке => некоторый логический ответ должен произойти

я дам вам только простой пример, вы можете развивать его

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 
    } 
}