AngularJS资源保存和后端的ORM映射

时间:2013-03-22 19:19:31

标签: codeigniter orm angularjs

所以我有一个使用CodeIgniter的后端,它的原生ActiveRecord用于管理我的基本数据对象。 ActiveRecord类添加了一些字段以帮助它找出如何关联对象(即“_class_name”,“_ table”,“_ column”)。当我将这些对象发送到前端时,会包含这些字段。我不想要这个,所以我创建了一个消毒功能,在它们被发送到前端之前取消它们。

现在当我在前端时,angular正在管理我的所有资源,然后我在$资源上调用$ save(),它将json对象发送到后端。然后在后端我将这个json变成一个对象:

$blob = unserialize(sprintf(
   'O:%d:"%s"%s',
    strlen('Blob'),
    'Blob',
    strstr(strstr(serialize($blob), '"'), ':')));

这会将json对象转换为Blob类,从而扩展ActiveRecord。现在问题是,因为我在将对象发送到前端之前剥离了ActiveRecord助手属性...当我在后端进行update()时,由于缺少这些属性,显然无法正确保存它

所以我的问题是......是否存在可以帮助这个过程的东西? 我的基本目标是将最小的Blob类发送到前端(没有ActiveRecord属性),然后以某种方式执行一些后端魔术,保存以将准系统Blob类重新关联到其ActiveRecord版本中,以便它可以自行保存。 我不介意研究新的ORM库...

谢谢! 莱恩

1 个答案:

答案 0 :(得分:1)

我不确定你是如何实现这一点的。所以这里有一个关于如何实现这样的例子的例子。

<div class="span2" ng-controller="NewStoryCtrl">
  <h4>New Story</h4>
  <form name="newStory">
      <label for="title">Title: </label>
      <input type="text" name ="title" ng-model="news.title" required>
      <label for="text">Text: </label>
      <textarea type="text" name="text" ng-model="news.text"required></textarea>
      <button ng-click="createNews()">Submit</button>
</form>

controller.js

function NewStoryCtrl($scope, $http) {
$scope.news = {title:$scope.title, text:$scope.text};
$scope.createNews = function(){
    $http.post('/ci/index.php/news/create/',$scope.news);
};}

news.php

public function create() {
   $data = json_decode(file_get_contents('php://input'), TRUE);
   $this->news_model->set_news($data);
}

newsModel.php

public function set_news($data) {
    $this->load->helper('url');
    $slug = url_title($data['title'], 'dash', TRUE);

    $retval = array(
        'title' => $data['title'],
        'slug' => $slug,
        'time' => time(),
        'text' => $data['text']
    );

    return $this->db->insert('news', $retval);
}