Yii 1.1用于crud操作的通用Web服务

时间:2015-09-02 10:22:15

标签: php web-services soap yii

使用Yii 1.1,我考虑创建一个基于SOAP的Web服务,该服务在模型上执行常见的CRUD操作。例如,我只想为接收一些参数的所有模型创建一个CreateObject函数,即时查找模型并将这些参数分配给适当的模型属性。 例如,对于用户模型,我在我的Web服务控制器中创建了以下操作:

 /** Create a new User record
 * @param string username
 * @param string password
 * @param string family
 * @param string name
 * @param string title
 * @param string email
 * @param string mobile
 * @return mixed true on success or an array of validation errors on failure
 * @soap
 */
public function createUser($username, $password, $family, $name="", $title="", $email="",$mobile="")
{
    $newUser = new User();
    $newUser->username = $username;
    $newUser->password = $password;
    $newUser->family = $family;
    $newUser->name = $name;
    $newUser->title = $title;
    $newUser->email = $email;
    $newUser->mobile = $mobile;

    //Get user roles
  /* if (is_array($roles) && !empty($roles)) {
        $roleList = User::getRoleList();
        $newUser->_roles = array_intersect($roles, $roleList);
    } else $newUser->_roles = array();*/

    if($newUser->save())
        return true;
    else
        return $newUser->getErrors();
}

此功能通过Web服务调用以创建新用户,并且工作正常。但是我必须做同样的事情来从其他模型创建一个新对象。

我听说过实体模式实体工厂,这可能会帮助我归档这个目标,但我没有找到任何关于此的好教程。 任何建议都受到高度赞赏。

1 个答案:

答案 0 :(得分:0)

使用接口或继承与SOAP是相当棘手的,因此更容易的方法是修改您的SOAP Web服务,以便它将接收两个字符串,一个用于模型的名称,另一个是带有属性的json字符串您的模型,因此您可以通过以下方式实现模型:

public function create($model,$attributes){
  $model=new $modelName;
}

此外,您可以使用php json函数解码编码为json对象的属性 的更新
如果您需要一些复杂的逻辑来初始化模型,您可以尝试使用工厂方法或Factory类。一个非常简单的例子可能是这样的:

class ModelsFactory{
  //use constants to identify the classes that you can return
  const Model1=1;
  const Model2=2;

  public static getInstance($model){
    $modelInstance=null;
    switch($model){
       case Model1:
       //... initialize a model1 class and asign to $modelInstance
       case Model2:
       //...
    }
    return $modelInstance;
  }  
}

如您所见,您可以轻松地初始化复杂类。您也可以根据需要进行扩展。此外,如果您需要参数,只需将它们以对象的形式或作为关联数组添加到creator方法中 希望这有帮助!