API post 请求未到达应用程序
API post request not reaching the application
我是 laravel 的新手,我正面临一个痛苦的问题。
我在我的电子商务中使用 Crinsane/LaravelShoppingcart api 并且我正在尝试在 vuejs 中发送带有 axios 的 post 请求,通过发送产品编号和数量。问题是 id 和数量没有到达应用程序,尽管我很确定我在 axios 中指定了正确的路线 link 并且我得到“没有模型 [App\Product] 的查询结果。”我假设这意味着处理请求的控制器功能正在工作,但 id 不是 sent/transformed 到资源 collection。我不知道问题是出在我正在使用的包还是代码还是其他问题。
这是 axios 请求
addCart(item) {
axios
.post('/api/cart/add', item)
.then(response => (response.data.data))
.catch(error => console.log(error.response.data))
这是路线:
Route::post('cart/add', [
'uses' => 'ShoppingController@store',
'as' => 'cart.add'
]);
这是购物车collection
public function toArray($request)
{
return [
'id' => $this->id,
'qty' => $this->qty
];
}
这是控制器
public function store(){
$pdt = Product::findOrFail(request()->id);
$cart = Cart::add([
'id' => $pdt->id,
'name' => $pdt->name,
'qty' => request()->qty,
'price' => $pdt->price
]);
这是产品型号
class Product extends Model
{
protected $fillable = [
'name', 'description', 'image', 'category', 'quantity', 'price', 'sold','remaining','rating', 'bestSelling', 'featured'
];
}
提前致谢
问题似乎出在您的控制器上。
来自docs:
To obtain an instance of the current HTTP request via dependency injection, you should type-hint the Illuminate\Http\Request
class on your controller method.
试试这个:
public function store(Request, $request){
// Make sure the 'id' exists in the request
if ($request->get('id')) {
$pdt = Product::find($request->get('id'));
if ($request->get('qty')) {
$qty = $request->get('qty')
}
$cart = Cart::add([
'id' => $pdt->id,
'name' => $pdt->name,
'qty' => $qty,
'price' => $pdt->price
]);
}
然后,在您的控制器顶部,添加:
use Illuminate\Http\Request;
所以我发现它需要一个 json 对象才能工作,我不得不将这段代码放在存储方法的末尾:
return response()->json(['cart' => $cart], 201);
我是 laravel 的新手,我正面临一个痛苦的问题。
我在我的电子商务中使用 Crinsane/LaravelShoppingcart api 并且我正在尝试在 vuejs 中发送带有 axios 的 post 请求,通过发送产品编号和数量。问题是 id 和数量没有到达应用程序,尽管我很确定我在 axios 中指定了正确的路线 link 并且我得到“没有模型 [App\Product] 的查询结果。”我假设这意味着处理请求的控制器功能正在工作,但 id 不是 sent/transformed 到资源 collection。我不知道问题是出在我正在使用的包还是代码还是其他问题。
这是 axios 请求
addCart(item) {
axios
.post('/api/cart/add', item)
.then(response => (response.data.data))
.catch(error => console.log(error.response.data))
这是路线:
Route::post('cart/add', [
'uses' => 'ShoppingController@store',
'as' => 'cart.add'
]);
这是购物车collection
public function toArray($request)
{
return [
'id' => $this->id,
'qty' => $this->qty
];
}
这是控制器
public function store(){
$pdt = Product::findOrFail(request()->id);
$cart = Cart::add([
'id' => $pdt->id,
'name' => $pdt->name,
'qty' => request()->qty,
'price' => $pdt->price
]);
这是产品型号
class Product extends Model
{
protected $fillable = [
'name', 'description', 'image', 'category', 'quantity', 'price', 'sold','remaining','rating', 'bestSelling', 'featured'
];
}
提前致谢
问题似乎出在您的控制器上。
来自docs:
To obtain an instance of the current HTTP request via dependency injection, you should type-hint the
Illuminate\Http\Request
class on your controller method.
试试这个:
public function store(Request, $request){
// Make sure the 'id' exists in the request
if ($request->get('id')) {
$pdt = Product::find($request->get('id'));
if ($request->get('qty')) {
$qty = $request->get('qty')
}
$cart = Cart::add([
'id' => $pdt->id,
'name' => $pdt->name,
'qty' => $qty,
'price' => $pdt->price
]);
}
然后,在您的控制器顶部,添加:
use Illuminate\Http\Request;
所以我发现它需要一个 json 对象才能工作,我不得不将这段代码放在存储方法的末尾:
return response()->json(['cart' => $cart], 201);