【问题标题】:Calling $this->modelname->methodname() with modelname as a variable使用模型名作为变量调用 $this->modelname->methodname()
【发布时间】:2019-09-09 06:50:44
【问题描述】:

我正在尝试创建一个通用方法,该方法能够根据我在代码中处理的“实体”保存来自不同模型的所有数据。正如你在下面看到的,我有一个变量 $entity 我想决定加载一个模型,然后从它调用一个方法。

我的示例中的两条注释行显示了我想要实现的目标,但它们不起作用。未注释(非动态)行 $this->companylocation_model->save(...) 工作正常。

注释实验给出了这个错误:call_user_func() expects parameter 1 to be a valid callback, class '$this->companylocation_model' not found。对我来说很奇怪,因为我正在将该模型加载到它之前的行中。

我也试过用反斜杠转义 > 但这也不起作用。

public function submit($entity) // $entity is set to companylocation during method call
{
    $filledEntityObject = $this->getEntityDataFromForm($entity);
    $this->load->model($entity . '_model');
    $this->companylocation_model->save($filledEntityObject, $filledEntityObject->id);

    //call_user_func(array('$this->' . $entity . '_model', 'save'), $filledEntityObject, $filledEntityObject->id);
    //call_user_func('$this->' . $entity . '_model->save', $filledEntityObject, $filledEntityObject->id);
...

预期的结果是能够以动态方式从具有两个参数的模型中调用save 方法。

【问题讨论】:

  • 未尝试但$this->{$entity . '_model'}->save(...)(使用正确的参数)是否有效? (对于旧版本,您可能需要使用 $name = $entity . '_model';$this->$name->save(...) - 再次不确定)
  • 谢谢@NigelRen! $this->{$entity . '_model'}->save($filledEntityObject, $filledEntityObject->id) 完成了这项工作

标签: php codeigniter dynamic model


【解决方案1】:

而不是使用call_user_func,您可以直接在调用中使用部件来构建名称...

$this->{$entity . '_model'}->save(...)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-01
    • 1970-01-01
    • 2011-01-14
    • 2016-12-28
    • 2017-09-01
    • 1970-01-01
    相关资源
    最近更新 更多