操作
使用PHP的REST API¶
php-redmine-api项目¶
- 一个简单的面向对象的PHP Redmine API客户端
PHP ActiveResource方式¶
以下是一个使用PHP ActiveResource的示例,这是一个轻量级的PHP库,可以用来访问Rails的REST API
<?php require_once ('ActiveResource.php'); class Issue extends ActiveResource { var $site = 'http://username:[email protected]:3000/'; var $request_format = 'xml'; // REQUIRED! } // create a new issue $issue = new Issue (array ('subject' => 'XML REST API', 'project_id' => '1')); $issue->save (); echo $issue->id; // find issues $issues = $issue->find ('all'); for ($i=0; $i < count($issues); $i++) { echo $issues[$i]->subject; } // find and update an issue $issue->find (1); echo $issue->subject; $issue->set ('subject', 'This is the new subject')->save (); // update status $issue->set ('status_id', 2)->save(); // delete an issue $issue->find (1); $issue->destroy (); ?>
已知问题
- 如果你正在处理大型描述,web服务器可能会返回417错误(坏期望)。
你应该将ActiveResource.php文件中的第381行替换为以下代码curl_setopt ($ch, CURLOPT_HTTPHEADER, array ('Expect:',"Content-Type: text/xml", "Length: " . strlen ($params)));
- 如果你尝试使用该类来写入
time_entries
,你会得到404响应(#9375)。原因是该类无法从实体的复数形式创建正确的单数形式。(编辑于2011-10-06:根据网站信息,该错误已在最新版本中修复:https://github.com/lux/phpactiveresource/issues/7#issuecomment-2300502)
这可以通过在ActiveResource.php中进行以下修改来修复 - 添加类变量
$sOriginalElementName
protected $sOriginalElementName = '';
- 将构造函数更改为在复数化之前使用原始实体名称设置类变量
function __construct ($data = array ()) { $this->_data = $data; // add this line here - to store the original name of the entity $this->sOriginalElementName = ($this->element_name ? $this->element_name : strtolower (get_class ($this))); // Allow class-defined element name or use class name if not defined $this->element_name = ($this->element_name ? $this->pleuralize ($this->element_name) : $this->pleuralize (strtolower (get_class ($this)))); ...
- 然后将方法
_send_and_receive
更改为使用$sOriginalElementName
而不是使用substr ($this->element_name, 0, -1)
function _send_and_receive ($url, $method, $data = array ()) { $params = ''; $el = $this->sOriginalElementName;//substr ($this->element_name, 0, -1); if ($this->request_format == 'url') { ...
由Kevin Saliou更新 大约11年前 · 14次修订