0

データベース接続の代わりに WebServices を使用して CActiveRecord 機能をレプリケートする CModel から派生したクラスの例を試した、または見つけた人はいますか?

RESTFULL WebServices を使用する場合、それは素晴らしいことです。データがJSONエンコードされて送信されたら、素晴らしい!!...

よろしくお願いします。ありがとう。

4

1 に答える 1

1

私もそれを探すのに多くの時間を費やしています。Github でこの Yii 拡張機能に出会いました: https://github.com/Haensel/ActiveResource

readme は changes.md に反映された変更で更新されていないため、このドキュメントも読むことをお勧めします。

Yii の EActiveResource

...これは Yii PHP フレームワークの拡張機能であり、ユーザーは RESTful サービスを永続ストレージとして使用するモデルを作成できます。この実装は、Yii の CActiveRecord クラスと ActiveResource の Ruby on Rails 実装 ( http://api.rubyonrails.org/classes/ActiveResource/Base.html )に触発されています。

ヒント:

注意: これはまだアルファ版リリースです! このプロジェクトはドラフトとして開始され、まだ開発中であるため、1.0 リリースがない限り、コードが壊れる可能性がある変更が発生する可能性があります。詳細については、CHANGES.md ファイルを参照してください。

何千もの異なるアプローチを使用する何千もの異なる REST サービスが存在するため、エラーをデバッグするのは難しい場合があります。そのため、すべての主要な機能に広範なトレースを追加したので、すべてのリクエスト、使用されたメソッド、およびサービスがどのように応答したかを常に確認できるはずです。Yii のトレース機能を有効にして、「ext.EActiveResource」カテゴリを探すだけです。

インストール:

  1. 拡張機能をアプリケーションの拡張機能フォルダー (例えば、'/protected/extensions') に配置して Yii に追加します。
  2. アプリケーションの main.php 構成ファイルを編集し、'application.extensions.EActiveResource.*' をインポート定義に追加します。
  3. リソースの構成をメイン構成に追加します

        'activeresource'=>array(
            'class'=>'EActiveResourceConnection',
            'site'=>'http://api.aRESTservice.com',
            'contentType'=>'application/json',
            'acceptType'=>'application/json',
        )),
        'queryCacheId'=>'SomeCacheComponent')
    

4.) 次のように EActiveResource を拡張するクラスを作成します (model() 関数を忘れないでください!):

簡単な概要:

 class Person extends EActiveResource
 {
 /* The id that uniquely identifies a person. This attribute is not defined as a property      
  * because we don't want to send it back to the service like a name, surname or gender etc.
  */
 public $id;

 public static function model($className=__CLASS__)
 {
     return parent::model($className);
 }

 public function rest()
 {
     return CMap::mergeArray(
        parent::rest(),
        array(
            'resource'=>'people',
        )
     );
 }

 /* Let's define some properties and their datatypes
 public function properties()
 {
     return array(
         'name'=>array('type'=>'string'),
         'surname'=>array('type'=>'string'),
         'gender'=>array('type'=>'string'),
         'age'=>array('type'=>'integer'),
         'married'=>array('type'=>'boolean'),
         'salary'=>array('type'=>'double'),
     );
 }

 /* Define rules as usual */
 public function rules()
 {
     return array(
         array('name,surname,gender,age,married,salary','safe'),
         array('age','numerical','integerOnly'=>true),
         array('married','boolean'),
         array('salary','numerical')
     );
 }

 /* Add some custom labels for forms etc. */
 public function attributeLabels()
 {
     return array(
         'name'=>'First name',
         'surname'=>'Last name',
         'salary'=>'Your monthly salary',
     );
 }

}

使用法:

/* sends GET to http://api.example.com/person/1 and populates a single Person model*/
$person=Person::model()->findById(1);

/* sends GET to http://api.example.com/person and populates Person models with the response */
$persons=Person::model()->findAll();

/* create a resource
$person=new Person;
$person->name='A name';
$person->age=21;
$person->save(); //New resource, send POST request. Returns false if the model doesn't validate

/* Updating a resource (sending a PUT request)
$person=Person::model()->findById(1);
$person->name='Another name';
$person->save(); //Not at new resource, update it. Returns false if the model doesn't validate

//or short version
Person::model()->updateById(1,array('name'=>'Another name'));

/* DELETE a resource
$person=Person::model()->findById(1);
$person->destroy(); //DELETE to http://api.example.com/person/1

//or short version
Person::model()->deleteById(1);

これがお役に立てば幸いです

于 2013-04-12T07:33:19.923 に答える