在Laravel中发送和接受POST内的参数

时间:2015-10-24 10:13:32

标签: json laravel post

我有基本的问题,但我真的找不到简单的答案。我是Laravel的新手。我试图在控制器中创建POST方法。

的Javascript

var url = "ling/public/translation/add";
$.ajax({
            method: "POST",
            url: url,
            data: ko.toJSON(self.wordToAdd)
        });

路线

Route::controller('translation', 'TranslationController');

TranslationController:

public function postAdd()
{
    return 1;
}

我的问题是我无法理解如何从Controller方法(postAdd)中获取参数。我正在以JSON格式发送模型。我习惯于在.NET C#中编程,在那里我会这样写:

public function postAdd(Translation $translation)
{
    // and then use $translation->category_id ...
    return 1;
    }

我的意思是我会发送JSON,.NET会自动将JSON反序列化为类Translation($ translation变量)。

如何在Laravel中执行此操作?

1 个答案:

答案 0 :(得分:1)

Laravel确实支持依赖注入。在public function postAdd(Translation $translation)的情况下,它将尝试实例化Translation对象,但不会了解您的json。在此上下文中,您将使用Request对象,然后解码json

public function postAdd(Request $request){

   // Pass the second paramater as true to return an associative array
   $translation = json_decode($request->data, true);

   // build your Translation object from the json

   return 1;
}

如果你只是想保存Translation,我希望你一旦解密了json,它就会采用正确的格式,所以你应该可以这样做:

App\Translation::create($translation);

同样重要的是要注意Laravel要求posts包含csrf token,所以你需要在你的ajax中传递它,我可以看到你正在使用{{1}因此,您可以将其包装在自定义绑定中,类似于:

knockoutjs

然后将其绑定到您的页面元素:

ko.bindingHandlers.postJson = {
    init: function (element, valueAccessor) {
        var values = valueAccessor() || {};
        var token = values.token;
        var wordToAdd = values.data

        var json = ko.toJSON(wordToAdd);

        $(element).on('click', function () {
            $.ajax({
                url: 'translation/add',
                method: 'post',
                data: {'data' : json, '_token': token },
                success : function(data){
                    console.log(data);
                },
                error : function(e){
                  console.log('Error! '+ e);
                }
            });
        });
    }
};
相关问题