データベース接続の代わりに WebServices を使用して CActiveRecord 機能をレプリケートする CModel から派生したクラスの例を試した、または見つけた人はいますか?
RESTFULL WebServices を使用する場合、それは素晴らしいことです。データがJSONエンコードされて送信されたら、素晴らしい!!...
よろしくお願いします。ありがとう。
データベース接続の代わりに WebServices を使用して CActiveRecord 機能をレプリケートする CModel から派生したクラスの例を試した、または見つけた人はいますか?
RESTFULL WebServices を使用する場合、それは素晴らしいことです。データがJSONエンコードされて送信されたら、素晴らしい!!...
よろしくお願いします。ありがとう。
私もそれを探すのに多くの時間を費やしています。Github でこの Yii 拡張機能に出会いました: https://github.com/Haensel/ActiveResource
readme は changes.md に反映された変更で更新されていないため、このドキュメントも読むことをお勧めします。
...これは 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」カテゴリを探すだけです。
リソースの構成をメイン構成に追加します
'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);
これがお役に立てば幸いです