Php 如何使用Laravel 6创建订阅,使用Stripe创建出纳10?

Php 如何使用Laravel 6创建订阅,使用Stripe创建出纳10?,php,subscription,laravel-6,laravel-cashier,Php,Subscription,Laravel 6,Laravel Cashier,拉威尔开发商 提交付款单后,我收到一条404错误消息。当我检查数据库时,订阅文档中没有更新。有什么建议吗?我已经做了一段时间了,我觉得我错过了一些显而易见的东西 SubscriptionController.php 类SubscriptionController扩展控制器 { 公共功能创建(请求$Request,计划$Plan) { $plan=plan::findOrFail($request->get('plan')); $request->user() ->新闻订阅('main',$pla

拉威尔开发商

提交付款单后,我收到一条404错误消息。当我检查数据库时,订阅文档中没有更新。有什么建议吗?我已经做了一段时间了,我觉得我错过了一些显而易见的东西

SubscriptionController.php

类SubscriptionController扩展控制器
{
公共功能创建(请求$Request,计划$Plan)
{
$plan=plan::findOrFail($request->get('plan'));
$request->user()
->新闻订阅('main',$plan->stripe\u plan)
->创建($request->stripeToken);
return redirect()->route('home')
->使用('success','Your plan subscribed successfully');
}
}
这是我的路线

 Route::get('/plans', 'PlanController@index')->name('plans.index');
 Route::get('/plan/{plan}', 'PlanController@show')->name('plans.show');
您正在路线和控制器上使用。i、 e.Laravel将自动注入模型实例,该实例的ID与请求URI中的相应值相匹配。如果在数据库中找不到匹配的模型实例,将自动生成404HTTP响应

但是您正在使用
findOrFail
重复此行为,并调用
$request->get('plan')
,它是
null
,因为
plan
不在您的输入请求中,而是在您的路径上。因此,
Plan::findOrFail(null)
导致404错误

您可以通过两种方式更正代码:

  • 删除包含
    findOrFail
    的不必要行,并让Laravel通过隐式绑定为您处理它(我建议采用这种方式):

    类SubscriptionController扩展控制器
    {
    公共功能创建(请求$Request,计划$Plan)
    {
    //$plan=plan::findOrFail($request->get('plan'));//user()
    ->新闻订阅('main',$plan->stripe\u plan)
    ->创建($request->stripeToken);
    return redirect()->route('home')
    ->使用('success','Your plan subscribed successfully');
    }
    }
    
  • 将路由和控制器的方法更改为使用
    $id
    而不是隐式绑定,并手动使用
    findOrFail
    (不推荐):

    类SubscriptionController扩展控制器
    {
    公共函数创建(请求$Request,$id)
    {
    $plan=plan::findOrFail($id);
    $request->user()
    ->新闻订阅('main',$plan->stripe\u plan)
    ->创建($request->stripeToken);
    return redirect()->route('home')
    ->使用('success','Your plan subscribed successfully');
    }
    }
    

  • 你的路线是什么?看这里:@HafezDivandari我把我的路线添加到了原来的帖子里。你怎么认为?
    Route::get('/plan/{id}', 'PlanController@show')->name('plans.show');