2013-03-12 2 views
1

저는 AngularJS에 처음 왔다고 말하면서 머리말을 드리겠습니다. & CodeIgniter. 단일 페이지 앱을 만들려고합니다. 중앙에는 뉴스 기사가 표시됩니다. 측면에는 새로운 이야기를 제출하는 양식이 있습니다. 나는 이야기가 DB에서 잘 표시되는 시점에 이르렀습니다. 그러나 측면의 양식에서 새로운 스토리를 만들려고하면 DB에 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을 사용하지 않았지만 데이터 형식이 맞을 수도 있습니다. 예를 들어, 백본은 내가 사용한대로 json 인코딩 된 데이터와 함께 $_POST이라는 단일 변수를 전송합니다.

당신이 방화범, 경우 Webdev 또는 다른 도구를 사용하면이 같은 AJAX 일을하려고 할 때 진행되는 상황을 확인하는 데 사용할 것이 필수적이다; 그렇지 않으면 너는 미쳐 갈거야. 백엔드로 전송되는 변수를 살펴보십시오. 인코딩 된 단일 var을 사용하면 json_decode, CLEAN & VALIDATE를 수집하고 사용해야합니다.

+0

감사합니다. 그리고 저는 방화범을 사용하고 있습니다. JSON 파일이 전달되고 있습니다. 하지만 json을 수집하거나 디코딩하는 것에 익숙하지 않습니다. 컨트롤러에서 어떻게 호출해야합니까? 그냥 "뉴스"요? 나는 전에 물건을 인코딩했습니다. 이미 PHP 변수가 있기 때문에 이것이 나에게 더 이해가됩니다. – EnigmaRM

+0

해결책을 찾았습니다 :'$ data = json_decode (file_get_contents ('php : // input'), TRUE);' – EnigmaRM

관련 문제