使用Laravel的JSON api模型绑定

使用Laravel的JSON api模型绑定,laravel,laravel-7,Laravel,Laravel 7,我们正在将一个旧的PHP项目转移到laravel。我们试图将JSON发布到我们创建的api中,但不知道如何将JSON绑定到模型。我们将模型作为参数添加到函数中,创建了模型,但没有从JSON中设置任何属性。laravel中是否存在这种类型的模型绑定 类计算器模型 { /** *价值A。 * *@var整数 */ 公帑每元;; /** *价值B。 * *@var整数 */ 公帑(亿元);; } 类计算器控制器 { //正在努力实现的目标。 公共函数添加(计算器模型$model) { 返回计算器::添

我们正在将一个旧的PHP项目转移到laravel。我们试图将JSON发布到我们创建的api中,但不知道如何将JSON绑定到模型。我们将模型作为参数添加到函数中,创建了模型,但没有从JSON中设置任何属性。laravel中是否存在这种类型的模型绑定

类计算器模型
{
/**
*价值A。
*
*@var整数
*/
公帑每元;;
/**
*价值B。
*
*@var整数
*/
公帑(亿元);;
}
类计算器控制器
{
//正在努力实现的目标。
公共函数添加(计算器模型$model)
{
返回计算器::添加($model);
}
//我们试图避免的事情
//因为现实世界中有很多属性/对象
公共功能添加(请求$Request)
{
$a=$request->json()->all();
$m=新计算器模型();
$m->A=$A['A'];
$m->B=$a['B'];
....
返回计算器::添加($m);
}
}
//在reoutes/api.php中
路由::post('add','API\CalculatorController@add');
//外部图书馆类
类计算器
{
公共静态函数添加(CalculatorModel$m)
{
返回$m->A+$m->B;
}
}
简单JSON帖子

{
“A”:2,
“B”:2
}

在ASP.Net中,我们可以向参数添加
[FromBody]
属性,以便ASP.Net将内容主体绑定为模型,而不是表单内容。我们正在laravel中寻找类似的功能。

laravel中没有此类绑定。正如@PKeidel所说,Laravel绑定是关于Models/DB访问的。您所需要的只是不带任何模型的控制器方法

public function add(Request $request)
{
    return $request->A + $request->B;
}
UPD:CalculatorModel类的新构造函数怎么样

public function __construct(array $properties = [])
{ 
    foreach ($properties as $key => $value) {
        $this->{$key} = $value;
    }
}

public function add(Request $request)
{
    $m = new CalculatorModel($request->all());

    return Calculator::Add($m);
}

在任何情况下,Laravel都不会为此提供现成的解决方案。

所有型号的功能都是保存/读取数据库中的内容。所以,如果这不是你想要的,那就忘掉它吧。因为在Laravel中,模型绑定到数据库表;-)

如果您只是想接收一些值作为json,请进行计算并返回一个您认为复杂的值

创建路线:

Route::post('add', function() {
  $data = request()->json();
  return $data->get('A') + $data->get('B');
});

Route::post('add', function(\Illuminate\Http\Request $r) {
  return $r->A + $r->B;
});
这就是一切

之后,只需确保使用json头发送数据。像这样:

fetch('/add', {
    method:"post",
    headers: {'Content-Type': 'application/json'},
    body: '{"A": 2,"B": 2}'
})
.then((d) => d.text())
.then((html) => {
    output.innerHTML = html;
})

查看此处的操作:

听起来模型绑定不是您想要的,它们是用于数据库访问的。尝试
returnrequest()->A+request()->B
或调试它
dd(request()->json())
dd(请求()->json()->all())好的,我可能用了不正确的名字来表示我们的目标。正如您可以使用laravel中的表单数据发布来实现这一点一样。它将表单变量绑定到参数中类类型的属性,我们需要它来处理JSON文章。他们在这里讨论如何让它与表单数据一起工作。你想占便宜吗?@fullstackofpanckes我们不是。我想出了一个办法让它运行得很好。在接下来的一两天内,我将用一个有效的例子写一个答案。但是,这对json不起作用,它只对发布的表单数据起作用。我们试图避免将数组中的所有数据复制到需要传递给库函数的模型中。我用一个更深入的例子更新了这个问题,说明了我们正在努力实现的目标。。。模型只不过是一个具有属性的对象。它们决不受数据库的约束。Laravel有一个ORM,允许轻松地将模型绑定到数据库或从数据库绑定,但这并不强制要求模型仅用于数据库使用。当然,它是一个对象,您可以用它做很多事情。但我想,对于一个laravel初学者来说,这句话清楚地表明,您不必使用模型,只需使用我为您提供的代码即可。它工作的证据是末端的laravelplayground链接