如何使用Modx Revolution API

时间:2013-01-11 22:08:32

标签: php api modx modx-revolution

我有一个客户正在考虑让其他公司开发一个iPad应用程序,将资源从现有的modx实例中提取出来。 [不 - 我不知道为什么它需要成为一个应用....]

他们正在寻求使用Modx API,从目前为止我所知道的需要有一个连接器或者其他东西,因为它不“正常工作”正确吗?

所以基本上我需要编写一个连接器来处理身份验证[API密钥类型的想法]并来回传递所有数据?看这里:http://rtfm.modx.com/display/revolution20/Loading+MODx+Externally我看到两种连接/使用modx的方法 - “在外部加载modx”优于“在api模式下加载modx”的优势

我发现API文档很容易,但在实际使用它时几乎是ZERO。

所以:

  1. 是否有API使用文档?
  2. 作为api方法的负载外部与负载的优点/优缺点是什么
  3. 以上所有我的假设都是正确的,还是我错过了一些非常基本的假设?

2 个答案:

答案 0 :(得分:2)

您已找到足以使用API​​ modx的文档。一旦你连接模式API(http://rtfm.modx.com/display/revolution20/Loading+MODx+Externally - 我最喜欢的第三个例子)你可以使用modx处理器做任何必要的事情,例如验证用户:

if(isset($_POST) && count($_POST)){
    $c = array(
        'username' => $_POST['username'],
        'password' => $_POST['password']
    );
    $response = $modx->runProcessor('security/login',$c);
    if($response->response['success'] == 1){
        $user['id'] = $modx->user->get('id');
                $profile = $modx->user->getOne('Profile');
        $user['fullname'] = $profile->get('fullname');
        $user['email'] = $profile->get('email');
        echo json_encode($user);
    }else{
        echo json_encode($response->response); 
    }
}

简单获取资源:

if ($res = $modx->getObject('modResource', 1)) {
    print_r($res->toArray());
}

或高级获取:

$response = $modx->runProcessor('resource/get', array('id' => 1));
if (!$response->isError()) {
    print_r($response->response['object']);
}
else {
    $modx->log(modX::LOG_LEVEL_ERROR, $response->getMessage());
}

答案 1 :(得分:0)

多年来,ModX文档并不是它的强项,但这里的链接很少。

首先,了解ModX works and was architected如何使用/为它开发。

ModX的API参考位于http://api.modx.com。在那里,您将找到所有可用的方法,其属性和参数。它不是一个指南,而是一个参考,所以不要期待太多的文献。

从版本2.3开始,您可以构建own API on top of ModX。对于自定义RESTful端点非常有用,但除非您有一些工作/构建API的经验,否则这可能具有挑战性。

最后,如果您正在寻找更深入的文档check out the books

例如,这就是您如何从外部提供ModX对象:

<?php
require_once '/absolute/path/to/modx/config.core.php';
require_once MODX_CORE_PATH.'model/modx/modx.class.php';
$modx = new modX();
$modx->initialize('web');
$modx->getService('error', 'error.modError');