【问题标题】:Submit AngularJS form with CodeIgniter使用 CodeIgniter 提交 AngularJS 表单
【发布时间】:2013-03-12 21:19:22
【问题描述】:

让我先说我是 AngularJS 和 CodeIgniter 的新手。 尝试创建单页应用程序。在中心,它显示新闻故事。旁边是提交新故事的表格。我已经到了数据库中的故事显示良好的地步。但是当我尝试从侧面的表单创建新故事时,它会在数据库中输入 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 传递到模型的最佳方式是什么?

【问题讨论】:

    标签: json codeigniter angularjs


    【解决方案1】:

    正如预期的那样,我的问题是没有获得正确类型的数据。控制器期待一个变量,但在 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);
    }
    

    【讨论】:

    • 非常有用的信息。您能否在一个答案中发布与此表单相关的所有代码?
    【解决方案2】:

    我没有使用过 Angular.js,但你的数据格式可能是正确的。例如,Backbone 发送一个名为 model 的单个 $_POST 变量,其中包含 json 编码数据,正如我所使用的那样。

    您必须使用 FirebugWebdev 或其他工具来查看当您尝试执行 AJAX 之类的工作时发生了什么这;否则你会发疯的。查看发送到后端的变量 - 它可能被描述为一个编码的单个 var,您需要收集、json_decode、CLEAN & VALIDATE 然后使用。

    【讨论】:

    • 谢谢。而且我一直在使用 Firebug。正在传递一个 JSON 文件。但我不熟悉收集或解码 json。在控制器中,我该如何调用它?只是“新闻”?我以前编码过东西。这对我来说更有意义,因为我已经有了一个 PHP 变量。
    • 找到解决方案:$data = json_decode(file_get_contents('php://input'), TRUE);
    猜你喜欢
    • 2014-02-07
    • 1970-01-01
    • 1970-01-01
    • 2012-04-19
    • 2016-02-19
    • 1970-01-01
    • 2013-03-03
    相关资源
    最近更新 更多