2013-03-12 85 views
1

让我通过说我是AngularJS的新手& CodeIgniter。 试图创建一个单页的应用程序。在中心显示新闻报道。侧面是提交新故事的表单。我到了数据库中故事显示正常的地步。但是当我尝试从表单中创建新的故事时,它会将0输入到数据库中。我想我在模型中的功能有问题。而且这可能是没有正确编码的信息在MVC之间传递的基础。用CodeIgniter提交AngularJS表格

的index.php

<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() { 
    $this->news_model->set_news(); 
} 

news_model.php(模型)

public function set_news() { 
$this->load->helper('url'); 

$slug = url_title($this->input->post('title'), 'dash', TRUE); 

$data = array(
    'title' => $this->input->post('title'), 
    'slug' => $slug, 
    'time' => time(), 
    'text' => $this->input->post('text') 
); 

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

模型中的东西是我最初的CI新闻教程中剩下的。这就是为什么我认为错误在这里。 将controllers.js中的信息传递给模型的最佳方式是什么?

回答

6

正如所料,我的问题是没有得到正确的数据类型。控制器期待一个变量,但在Angular控制器中,我将它作为JSON传递。我从来没有经历过解码。

news.php(控制器)

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

然后在模型中,我只需要它作为参数传递到set_news()。我最终更改了一些变量名称,仅供个人澄清。

* news_model.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); 
} 
1

我还没有使用Angular.js,但您的数据格式可能是正确的。例如,骨干发送一个单一的$_POST变量,称为模型与json编码数据,因为我已经使用它。

这是你必须使用萤火虫Webdev的或其他工具,看看有什么是当你尝试做AJAX工作像这样要去;否则你会发疯。看看发送到后端的变量 - 它可能是被描述的,你需要收集编码的单个var,json_decode,CLEAN & VALIDATE然后使用。

+0

谢谢。我一直在使用Firebug。正在传递JSON文件。但我不熟悉收集或解码json。在控制器中,我该如何调用它?只是“新闻”?我以前编码过的东西。这对我来说更有意义,因为我已经有一个PHP变量。 – EnigmaRM 2013-03-12 22:24:00

+0

找到了一个解决方案:'$ data = json_decode(file_get_contents('php:// input'),TRUE);' – EnigmaRM 2013-03-13 22:15:08