Php Yii 1.1用于crud操作的通用web服务 使用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(); }

Php Yii 1.1用于crud操作的通用web服务 使用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(); },php,web-services,soap,yii,Php,Web Services,Soap,Yii,此函数通过web服务调用以创建新用户,并且工作正常。但是,我必须做同样的事情,从其余的模型中创建一个新对象 我听说过实体模式或实体工厂,这可能有助于我实现这一目标,但我还没有找到任何关于这方面的好教程。 非常感谢您的建议。在SOAP中使用接口或继承非常棘手,因此更简单的方法是修改您的SOAP web服务,使其接收两个字符串,一个用于模型名称,另一个用于模型属性的json字符串,因此,可以通过以下方式实例化模型: public function create($model,$attributes)

此函数通过web服务调用以创建新用户,并且工作正常。但是,我必须做同样的事情,从其余的模型中创建一个新对象

我听说过实体模式实体工厂,这可能有助于我实现这一目标,但我还没有找到任何关于这方面的好教程。
非常感谢您的建议。

在SOAP中使用接口或继承非常棘手,因此更简单的方法是修改您的SOAP web服务,使其接收两个字符串,一个用于模型名称,另一个用于模型属性的json字符串,因此,可以通过以下方式实例化模型:

public function create($model,$attributes){
  $model=new $modelName;
}
您还可以使用php json函数对编码为json对象的属性进行解码。
更新
如果需要一些复杂的逻辑来初始化模型,可以尝试使用工厂方法或工厂类。一个非常简单的例子如下:

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方法中。

希望这有帮助

谢谢,但这和我做的一样,它不能满足某些条件,因为创建新对象并不总是一个简单的任务。