【发布时间】:2019-11-18 12:31:02
【问题描述】:
我有一个模型,有很多属性(属性)。其中之一 form_fields 存储 JSON 以使用验证填充动态表单字段。喜欢:
// ./protected/models/FormBuilder.php
/**
* FormBuilder AR model class with dynamic field building capabilities
*
* @property integer $id
* @property string $form_title
* @property string $form_fields Form fields definitions stored as JSON String
*/
class FormBuilder extends CActiveRecord {
public function init_form_model() {
$dynamic_fields = CJSON::decode($this->form_fields);
foreach($dynamic_fields as $field => $props) {
// Neither this
$this->$field = '';
// nor this working!!!
$this->setAttribute($field, '');
}
}
/* other methods as it is */
}
// ./protected/controllers/FormBuilderController.php
class FormBuilderController extends CController {
// ...
public function actionServing($form_id) {
$form = FormBuilder::models()->findByPk($form_id);
$form->init_form_model();
$this->render('dyn_frm', ['form' => $form]);
}
// ...
}
上面的方法FormBuilder->init_form_model() 抛出异常。 属性“FormBuilder.first_name”未定义。。
有什么解决办法吗?如何通过为模型类分配动态属性来进一步进行。 Yii 1.1 设置属性如果满足两个条件,首先如果类本身定义了属性,或者第二个 AR 模型的元数据有名为该属性的列被分配。
我也尝试使用 PHP 的 ReflectionClass 设置新属性,但收到相同的错误消息。
【问题讨论】: