Submit AngularJS form with CodeIgniter
angularjs, codeigniter, json
Solution
As expected, my issue was with not getting the right type of data. Controller was expecting a variable, but in Angular controller I was passing it as JSON. I hadn't ever gone through decoding.
news.php (controller)
public function create() {
$data = json_decode(file_get_contents('php://input'), TRUE);
$this->news_model->set_news($data);
}
And then in the model, I just needed to pass it as a parameter to set_news(). I ended up changing some variable names, just for personal clarification.
*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);
}
Problem
Let me preface this by saying I'm new to AngularJS & CodeIgniter. Trying to create a single page app. In the center it displays news stories. On the side is a form to submit new stories. I'm to the point where the stories display fine from the DB. But when I try to create new stories from the form on the side, it enters 0 into the DB. I assume I have an issue with my function in the model. And it's probably as basic as not having the information encoded correctly to pass between MVC. 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 (controller) ``` public function create() { $this->news_model->set_news(); } ``` news_model.php (model) ``` 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); } ``` The stuff in the model is leftover from my initial CI news tutorial. That's why I assume the error is here. What's the best way to pass the information from the controllers.js to the model?