我有3个模型,它们都继承了抽象的Plan
模型,BehaviourPlan
,AffirmationPlan
和ProfilePlan
是否可以通过同一条路线提供所有服务?这是我到目前为止的内容,但是由于Plan
是抽象的,因此会抛出Target [App\Plan] is not instantiable.
Route::prefix('plans')->group(function () {
Route::get('/{plan}', function (\App\Plan $plan) {
dd($plan);
});
});
答案 0 :(得分:0)
我已经解决了这一问题,方法是更改每个计划的子项以其类型为前缀,然后仅运行if
语句以在控制器中检索计划,例如:
public function show(Student $student, string $plan_id)
{
$plan = null;
if(starts_with($plan_id, "behaviour"))
{
$plan = BehaviourPlan::where('slug', $plan_id)->first();
}
else if(starts_with($plan_id, "affirmation"))
{
$plan = AffirmationPlan::where('slug', $plan_id)->first();
}
else if(starts_with($plan_id, "profile"))
{
$plan = ProfilePlan::where('slug', $plan_id)->first();
}
if ($plan == null)
return abort('404');
dd($plan);
}
虽然似乎有些粗糙,但我仍在寻找一种更整洁的方法来解决此问题