1

我有一个使用 Luracast Restler API 在 PHP 中实现的 REST Web 服务。

如果我@class在暴露公共 API 方法的自定义类或实现执行身份验证的 iAuthenticate 方法的类中的文档注释中添加任何标签,如果错误报告为 ON,restler 将无法解析请求。

我认为问题在于 DocParser 类试图处理@class标签,就好像 PHPClass声明的位置一样。该类的方法formatClass()生成一个undefined index通知。如果错误报告为 ON,这将发送标头,因此当稍后 Restler 尝试发送响应时,它将无法更改标头以指示 JSON 内容已发送并被Cannot modify header information - headers already sent触发。

是否有任何解决方法或者只是 Restler Api 中的一个错误?(除了设置我的错误报告级别以避免发送通知)。

4

1 回答 1

1

更新:它已在 Restler 2.1.5 中修复


这是一个存在于 Restler 2.1.4 中的错误,由 DocParser 引起,因为它需要@class特定格式的注释,如下所示

/**
 * @class ClassName(property=value&property2=value2)
 */

它用于在初始化后设置另一个类的属性。例如,我们可以使用它来告诉 XmlFormat 设置根名称,定义应该转换为属性的内容等,让我们以已知的 BMI 示例,添加 PHPDoc 注释,如下所示,

<?php
class BMI {
    /**
    * @class XmlFormat(root_name=self&attribute_names=height,weight)
    */
    function index($height=162.6, $weight=84) {
        $result = new stdClass();
        $cm = $height;
        $kg = $weight;

        $meter = $cm / 100;
        $inches = $meter * 39.3700787;
        $feet = round($inches/12);
        $inches = $inches % 12; 

        $result->bmi = round($kg/($meter*$meter),2);
        $lb = round($kg/0.45359237,2);

        if($result->bmi<18.5){
            $result->message = 'Underweight';
        }elseif ($result->bmi<=24.9){
            $result->message = 'Normal weight';
        }elseif ($result->bmi<=29.9){
            $result->message = 'Overweight';
        }else{
            $result->message = 'Obesity';
        }
        $result->metric = array('height'=>"$cm centimeter", 'weight'=>"$weight kilograms");
        $result->imperial = array('height'=>"$feet feet $inches inches", 'weight'=>"$lb pounds");
        return $result;
    }
}

返回以下 XML

<?xml version="1.0"?>
<self>
    <bmi>31.77</bmi>
    <message>Obesity</message>
    <metric height="162.6 centimeter" weight="84 kilograms"/>
    <imperial height="5 feet 4 inches" weight="185.19 pounds"/>
</self>

否则将是

<?xml version="1.0"?>
<response>
  <bmi>31.77</bmi>
  <message>Obesity</message>
  <metric>
    <height>162.6 centimeter</height>
    <weight>84 kilograms</weight>
  </metric>
  <imperial>
    <height>5 feet 4 inches</height>
    <weight>185.19 pounds</weight>
  </imperial>
</response>

更多用例和解释可以在这里找到

@class当以意外格式定义时,它不应该抛出错误。我们将在下一个版本中修复它。

于 2012-05-03T10:25:24.153 回答