1

LuracastRestlerAPIを使用してPHPにRESTWebサービスを実装しています。

@classパブリックAPIメソッドを公開するカスタムクラスまたは認証を実行するiAuthenticateメソッドを実装するクラスのドキュメントコメントにタグを追加すると、エラーレポートがオンの場合、restlerはリクエストの解析に失敗します。

問題は、DocParserクラス@classがPHPClass宣言の場合と同じようにタグを処理しようとすることだと思います。クラスのメソッドは通知formatClass()を生成します。エラーレポートがオンの場合、これはヘッダーを送信するため、後でRestlerが応答を送信しようとしたときに、JSONコンテンツが送信されてトリガーundefined indexされたことを示すためにヘッダーを変更することはできません。Cannot modify header information - headers already sent

これに対する回避策はありますか、それともRestler Apiのバグですか?(通知が送信されないようにエラー報告レベルを設定することは別として)。

4

1 に答える 1

1

更新: Restler2.1.5で修正されました


@classこれは、以下に示すように、特定の形式のコメントを期待するため、DocParserによって引き起こされるRestler2.1.4に存在するバグです。

/**
 * @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 に答える