2015-09-02 2 views
0

Используя Yii 1.1, я рассматриваю создание веб-службы на основе мыла, которая выполняет обычные операции CRUD на моделях. Например, я просто хочу создать единственную функцию CreateObject для всех моделей, которая получает некоторые параметры, находит модель «на лету» и присваивает эти параметры соответствующим атрибутам модели. , например, для модели User я создал следующие действия в мой контроллер веб-службы:Yii 1.1 Веб-сервис общего назначения для операций crud

/** 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(); 
} 

Эта функция вызывается с помощью веб-сервиса для создания нового пользователя, и это прекрасно работает. Однако я должен сделать то же самое, чтобы создать новый объект из остальных моделей.

Я слышал о рисунка на Entity или сущности завод, который может помочь мне в архив этой цели, но я не нашел хороший учебник об этом. Любое предложение высоко ценится.

ответ

0

Использование интерфейсов или наследования с помощью SOAP довольно сложно, поэтому проще было бы изменить ваш веб-сервис SOAP, чтобы он получал две строки: одну для имени модели, а другую - строку json с атрибутами для вашей модели, так что вы можете модель создания экземпляра следующим образом:

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

также вы можете использовать функции PHP JSON, чтобы декодировать атрибуты, закодированные в виде объекта JSON.
UPDATE
Если вам нужна сложная логика для инициализации ваших моделей, вы можете попробовать использовать заводской метод или класс 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; 
    } 
} 

Как вы можете видеть, вы можете легко инициализировать сложные классы. Также вы можете расширить его до ваших потребностей. Также, если вам нужны параметры, просто добавьте их в метод создателя в виде объекта или как ассоциативный массив.
Надеюсь, это поможет!

+0

Спасибо, но это то же самое, что я сделал, и он не может удовлетворять определенным условиям, так как создание новых объектов не всегда является прямым назначением. – Amin

Смежные вопросы