Для реализации API client на PHP-платформе Wad-er создадим небольшой модуль test. Создайте каталог ext/test, внутри него – каталоги controllers, models, views. Приведенные ниже примеры кода следует расположить в этих каталогах.
Файл контроллера ext/test/controllers/index.php получает данные модели и формирует представление:
class test_controllers_index extends common_controller { public function index($pars = '') { if($this->request['login']) { $model = new test_models_test($this->parser); $model->login = (isset($this->request['login'])) ? $this->request['login'] : ''; $model->password = (isset($this->request['password'])) ? $this->request['password'] : ''; $data = $model->getInfo(); } $this->data = $data; $this->url = $this->parser->makeUrl($this->parser->pageId); $this->render(); } public function createAction() { //код… } public function readAction() { //код…. } }
Файл представления ext/test/views/index.php отображает форму, в которую пользователь вводит логин-пароль. В тестовом примере следует вводить admin/admin. В приведенном ниже коде следует убрать лишние пробелы возле тегов:
< form class="form-stacked" method="POST" action="< ?php print $url ? >" > < div class="row" > < div class="span5 offset5" > < label for="login_username" >Username:< /label > < input type="text" id="login" name="login" placeholder="username" / > < label for="login_password" >Password:< /label > < input type="password" id="password" name="password" placeholder="password" / > < /div > < /div > < div class="actions" > < button type="submit" name="login_submit" class="btn primary large" >Send Request< /button > < /div > < /form > < ?php print $data; ? >
Или можете сконфигурировать приложение так, чтобы вместо этой формы для авторизации поступали данные из $_SESSION (авторизованный в PHP-платформе Wad-er пользователь).
Файл модели ext/apitest/models/test.php (получает данные о текущем пользователе и отсылает запрос API Server):
class test_models_test { protected $parser; public $login = ''; public $password = ''; public function __construct($parser) { $this->parser = $parser; } public function getInfo() { $data = ''; $a = $this->parser->utils->getFieldsFromSql("SELECT * FROM sys_objects WHERE (objtype='sys_users') AND (str2_".$this->parser->lang_suff."='".trim($this->login)."') AND (str3_".$this->parser->lang_suff."='".md5(trim($this->password))."') ", array('', 0, 0), 'num'); if(!$a[0]) throw new Exception('User does not exists'); if($a[0]) { $data = $this->sendRequest(); } return $data; } public function sendRequest() { if(isset($this->login)) { $data = '
'; include_once(SYS_BASE_PATH.'ext/common/apiclient.php'); $api = new apiclient(); try { $api->clientid = 'apitest_client1';//открытый ключ $api->clientkey = '123456789011121314151617181920';//секретный ключ $api->url = 'http://api_server/index.php'; //url, по которому происходит запрос $api->controller = 'test'; //контроллер, который обрабатывает поступивший запрос $api->httpuser = ''; $api->httppsw = ''; $api->action = 'index'; //действие для обработки запроса $api->return_format = 'xml'; //формат возвращаемых данных $api->controller_to_url = false; //свойство для интеграции с Delopro4.0 $data = $api->sendRequest(array( 'login' => $this->login, 'password' => $this->password )); foreach($data->children() as $child) { $data .= "
"; $data .= $child->getName(); $data .= " = "; $data .= (string)$child; } } catch (Exception $e) { echo $e->getMessage();} } return $data; } }
Здесь в модели создается экземпляр класса apiclient, который посылает запрос к API Server и получает ответ об успехе/неудаче операции.