我有基本的问题,但我真的找不到简单的答案。我是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中执行此操作?
答案 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);
}
});
});
}
};