2

はじめに、私は AngularJS と CodeIgniter は初めてだと言っておきましょう。シングル ページ アプリを作成しようとしています。中央にはニュース記事が表示されます。側面には新しいストーリーを投稿するためのフォームがあります。DB からストーリーが正常に表示されるようになりました。しかし、サイドのフォームから新規ストーリーを作成しようとすると、DBに0が入ります。モデルの機能に問題があると思います。そして、それはおそらく、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 (コントローラー)

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 からモデルに情報を渡す最良の方法は何ですか?

4

2 に答える 2

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);
}
于 2013-03-13T22:13:14.893 に答える
1

私はAngular.jsを使用していませんが、データ形式はおそらく正しいでしょう。たとえば、私が使用したように、 Backboneはモデルと呼ばれる単一の$_POST変数をjsonでエンコードされたデータとともに送信します。

このようなAJAX作業を行おうとすると、 FirebugWebdev 、またはその他のツールを使用して何が起こっているかを確認することが不可欠です。そうしないと気が狂ってしまいます。バックエンドに送信されている変数を見てください - おそらく記述されています。エンコードされたシングルを収集し、json_decode、CLEAN & VALIDATE してから使用する必要があります。var

于 2013-03-12T21:37:12.900 に答える