选择基于POST-ed模型类名的模型是一个好习惯吗?

时间:2016-09-17 11:56:11

标签: php laravel laravel-5

假设我们有模型AB,我们需要根据视图中发布的信息选择其中哪一个实例化

做这样的事情会是一个好习惯:

// ...
$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!
// ...

或者这种方法将来会引入一些问题吗?

1 个答案:

答案 0 :(得分:0)

  

答案是

<强>原因:

  

如果您的模型A的功能与B不同,该怎么办?

在这种情况下,您需要添加额外的检查,如果给出A,则需要调用哪些函数以及如果B等等。如果您认为您具有相同的功能集,那么您应该使用Repository Pattern,对于laravel,请参阅this,这将有助于您使系统更具可扩展性,灵活性和可维护性。

很高兴知道完整的要求是什么,并根据该代码。

希望这会对你有所帮助:)