我必须设置多个cron作业。每个cron都是对服务器的单独请求。所以,我从以下开始,每个请求将由交换机内的一个案例处理,但案例必然会增加,因此在我看来并不是一个好主意。
require_once './invoice_cron.php';
$checkRequest = isset($_REQUEST['request']);
if($checkRequest) {
$request_name = $_REQUEST['request'];
switch($request_name) {
case 'send_invoice':
break;
default:
break;
}
}
这里有什么更好的方法?
答案 0 :(得分: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
}
}
答案 1 :(得分:0)
请有一个请求处理程序接口:
<?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;
}
}
请求列表必然会增加,因此有必要有效地搜索列表。所以,在这里我们进行数组翻转并检查存在的关键。