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