有没有人尝试过或找到一个从CModel派生的类的示例,它使用WebServices而不是数据库连接复制CActiveRecord功能?
如果使用RESTFULL WebServices完成它会很棒。如果数据传输JSON编码,很棒!! ...
我会帮助你。感谢。
答案 0 :(得分:1)
我花了很多时间寻找它,我在Github上遇到了这个Yii扩展: https://github.com/Haensel/ActiveResource
它允许您准确地找到您要查找的内容,自述文件未使用changes.md 中反映的更改进行更新,因此我建议您仔细阅读本文档。
...是Yii PHP框架的扩展,允许用户创建使用RESTful服务作为持久存储的模型。 该实现的灵感来自Yii的CActiveRecord类和ActiveResource(http://api.rubyonrails.org/classes/ActiveResource/Base.html)的Ruby on Rails实现。
注意:这仍然是ALPHA释放! 这个项目是作为草案开始的,目前仍处于开发阶段,因此只要没有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);
希望这有助于你