假设我们有模型A
和B
,我们需要根据视图中发布的信息选择其中哪一个实例化。
做这样的事情会是一个好习惯:
// ...
$this->validate($request, [
'model.class_name' => 'in:A,B' // restrict users to only pass either 'A' or 'B' as class_name
])
$data = $request()->get('model'); // <-- contains: $data['id'] and $data['class_name']
$id = $data['id'];
$class_name = $data['class_name'];
$$class_name::find($id); // <-- notice, that we are using POST-ed 'class_name' to determine which model we want to use!
// ...
或者这种方法将来会引入一些问题吗?
答案 0 :(得分:0)
答案是否。
<强>原因:强>
如果您的模型
A
的功能与B
不同,该怎么办?
在这种情况下,您需要添加额外的检查,如果给出A
,则需要调用哪些函数以及如果B
等等。如果您认为您具有相同的功能集,那么您应该使用Repository Pattern,对于laravel,请参阅this,这将有助于您使系统更具可扩展性,灵活性和可维护性。
很高兴知道完整的要求是什么,并根据该代码。
希望这会对你有所帮助:)