【问题标题】:Laravel 4 not getting JSON from input Backbone.jsLaravel 4 没有从输入 Backbone.js 获取 JSON
【发布时间】:2013-11-01 04:56:07
【问题描述】:

我已阅读并使用过其他关于此的帖子,看来我刚刚下载的 Laravel 4 版本对控制器处理 JSON 输入的方式进行了更多更改。

$input = Input::json()->all(); 给我错误,好像我在执行 PUT 请求后请求有效负载的某些部分时指的是不存在的东西。如果没有->all();,我会得到一个 symfony 错误。 有谁知道如何在 Laravel 4 的最新版本中从主干获取良好的 JSON?

目前,我正在做很多事情来获取我的数据,即:

    $input_title = Input::get('title');
        $input_completed = Input::get('completed');

        $task = Task::find($id);
        $task->title = $input_title;
        $task->completed = $input_completed;
        $task->save();

是的,我正在做关于 tutsplus 的教程来学习 laravel/backbone,所以请耐心一点。

我在使用Input::get(); 时遇到的错误是: {"error":{"type":"UnexpectedValueException","message":"响应内容必须是实现__toString()的字符串或对象,给定\"array\"。","file":"/Users/ brentlawson23/Sites/laravel4App/bootstrap/compiled.php","line":16858}}

我真的很想得到 Laravel 特定的答案,而不是直接使用 php 来对有效负载进行字符串化。

我只使用 Input::json(); 得到同样的错误

对于 Laravel 4 的当前 beta,Input::json();没有获得可用于在表中创建新行的请求有效负载的字符串化版本, Input::json()->all(); 也没有(希望与 symfony 的 ParameterBag 配合得很好)。我在其他黑客中尝试过 json_encode,基本上在这个 tut 中的每一步,我都碰到了一些砖墙。根据我在这里提出的内容,有人有什么建议吗?

今天我只是尝试回应 $input = Input::json(); 的结果时得到了这个: {"error":{"type":"ErrorException","message":"可捕获的致命错误:无法将 Symfony\Component\HttpFoundation\ParameterBag 类的对象转换为 /Users/brentlawson23/Sites/laravel4App/app 中的字符串/controllers/TasksController.php 第 45 行","file":"/Users/brentlawson23/Sites/laravel4App/app/controllers/TasksController.php","line":45}}

是的,我研究过 Symfony API。

【问题讨论】:

  • 你能用Input::get()(无参数)吗?
  • 嗯,嗯,不确定,我试试看,谢谢
  • 所以实际上不起作用,简单直观,我很欣赏它,但它给出了同样的错误
  • 您能否在问题中包含错误,它可能有助于某人重现/调试。

标签: backbone.js laravel


【解决方案1】:

我遇到了类似的问题。 Backbone 的输入在 Laravel 中转换为数组。在 tutsplus 上,Jeffrey Way 正在使用对象。所以我试图这样做(就像在教程中一样):

return $input->title // using object,but got an error.

如果我将该行更改为:

return $input["title"] // everything works fine with array.

【讨论】:

    【解决方案2】:

    我还在学习关于 tuts+ 的 Backbone 教程。如果我的假设是正确的,您是否停留在“创建新联系人”部分?下面是我在 ContactController.php 中如何让它为我工作:

    public function store()
    {
        $input = Input::all();
        Contact::create(array(
            'first_name' => $input['first_name'],
            'last_name' => $input['last_name'],
            'email_address' => $input['email_address'],
            'description' => $input['description']
        ));
    }
    

    然后还需要使用以下内容更新 app/models/Contact.php:

    class Contact extends Eloquent {
        protected $fillable = array('first_name', 'last_name', 'email_address', 'description');
    

    }

    这应该让它为您工作并将联系人插入数据库。如果我看错了,请告诉我,我可以再看看。

    干杯,

    肖恩

    【讨论】:

    • 对我来说 Input::all() 是空的!!但是 Input::getContent() 有一个 JSON 数据字符串。
    • @Sean 是的!您的解决方案效果很好。我也在开发 tuts+ 联系人应用程序。如果您正在使用同一个应用程序,请不要忘记在“联系”模型中添加“公共 $timestamps = false”。谢谢
    猜你喜欢
    • 2018-03-01
    • 2014-06-13
    • 2013-11-01
    • 2019-04-26
    • 2014-10-10
    • 1970-01-01
    • 1970-01-01
    • 2014-04-26
    • 2014-10-14
    相关资源
    最近更新 更多