答案 0 :(得分:0)
您可以定义将计划作为参数的路线,并使用Regular Expression Constraints,以便该参数只能采用您允许的某些值。所以你的路线定义可能如下所示:
Route::get('/purchase/{plan}', 'BuySubscriptionController@start')
->name('purchase-plan')
->where('plan', 'the-basic-plan|the-mega-plan');
然后在你的控制器动作中使用参数:
class BuySubscriptionController
{
protected $plans = [
'the-basic-plan' => 'plan-one',
'the-mega-plan' => 'plan-two'
];
function start($plan)
{
// You can use an associative array to convert the $plan parameter
// into the value you need for querying the database
$plan = Plan::findBySlug($this->plans[$plan]);
return view('someView', ['plan' => $plan]);
}
}
如果您需要为路线生成网址,您只需使用route
辅助方法并将其传递给计划名称:
route('purchase-plan', 'the-basic-plan');
你会得到:
site.com/purchase/the-basic-plan
此解决方案允许您添加任意数量的计划名称,只需在路径的where
约束中添加URL的公共计划,然后将该值与控制器中查询所需的值相关联。 $plans
财产。