[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Php "Сервер команд"
Zuenf
Нужно было написать скрипт обработки команд c поддержкой ajax.
Т.е. отправляем на сервер параметр 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?
Есть ли какой-то более продвинутый аналог?
Замечания по скрипту и его оформлению.

Спасибо :)
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.