Т.е. отправляем на сервер параметр command, выполняем одноименную функцию если она определена и отправляем ответ.
Оформил так:
class AppCommands
{
private $prefix;
function __construct($prefix = 'command')
{
$this->prefix = $prefix;
}
public function run_command($command, $data = array())
{
$command = $this->set_command_name($command);
$command_result = false;
if(function_exists($command))
$command_result = $command($data);
return $command_result;
}
public function response($data, $ajax = true, $url = null)
{
session_start();
$_SESSION['command_response'] = $data;
if($ajax) die(json_encode($data));
if(empty($url))
$url = $_SERVER['HTTP_REFERER'];
if($url != $_SERVER['SCRIPT_URI'])
header('Location: '.$url);
}
private function set_command_name($command)
{
if(!preg_match('/^'.$this->prefix.'_./',$command))
$command = $this->prefix.'_'.$command;
return $command;
}
}
$app_cmd = new AppCommands();
if(isset($_POST['command']))
{
$command_result = $app_cmd->run_command($_POST['command'], $_POST);
$is_ajax = filter_input(INPUT_POST, 'ajax', FILTER_VALIDATE_BOOLEAN);
$app_cmd->response($command_result, $is_ajax);
}
/* Пример комманды */
function command_login($data)
{
$login = $data['login'];
$password = $data['password'];
if($login == 'Vasya' && md5($password) == md5('12345'))
{
session_start();
$_SESSION['user'] = 'Vasya';
return 'logged';
}
return 'login error';
}
Рационально ли такое поведение ответа скрипта при отсутствии параметра ajax?
Есть ли какой-то более продвинутый аналог?
Замечания по скрипту и его оформлению.
Спасибо :)