我有一个中心点,请求来自GET var' service'和' action'也许是一些POST数据。
这就是我的api.php现在的样子:
<?php
$service_name = filter_input(INPUT_GET, 'service');
if($service_name == 'training') {
require_once('../service/TrainingService.php');
$service = new RegisterService();
}
elseif ($service_name == 'mail') {
require_once('../service/MailService.php.php');
$service = new MailService();
}
$service->init();
有更清洁的方法吗?也许是一个奇特的设计模式?我可以想象这个if else结构会变得很大。
更新
我喜欢Marc B他的解决方案。这是我的版本。总是欢迎使用Idea以获得更好的方法...也许从XML配置文件中加载可用的类?
<?php
$services = array(
'mail' => 'MailService.php',
'training' => 'TrainingService.php'
);
$service_object = null;
$service_name = filter_input(INPUT_GET, 'service');
if (array_key_exists($service_name, $services)) {
require_once('../service/' . $services[$service_name]);
$class_name = ucfirst($service_name) . 'Service';
$service_object = new $class_name();
if($service_object != null && is_subclass_of($service_object, 'Service')) {
$service_object->init();
}
}
?>
答案 0 :(得分:2)
使用查找数组?
$services = array
// 'name' => 'script file'
'mail' => 'MailService.php',
'training' => 'TrainingService.php'
);
if (array_key_exists($service_name, $services)) {
require_once('../service/' . $services[$service_name]);
}
答案 1 :(得分:0)
尝试使用Flight等框架。 Flight(和其他人)可以定义路线。所以使用你的例子:
Flight::route('POST /training', function(){
... code for POST to /training.
});
Flight::route ('/mail', function(){
... do something with either GET, POST, etc.
}
Flight::start();