我正在研究一個涉及在高級抽象級別(它是CMS應用程序)中生成表單的應用程序。我想動態創建CFormModel對象並即時設置表單域。我想我可以通過擴展CFormModel來實現,然後動態創建代表表單字段的屬性類(Yii lingo中的'attributes')。動態創建Yii FormModel對象(CFormModel)
爲了說明,而不是指定在下面的類登錄表單(在一個文件中定義):
// From: http://www.yiiframework.com/doc/guide/1.1/en/form.model
class LoginForm extends CFormModel
{
public $username;
public $password;
public $rememberMe=false;
private $_identity;
public function rules()
{
return array(
array('username, password', 'required'),
array('rememberMe', 'boolean'),
array('password', 'authenticate'), // assume function authenticate defined elsewhere
);
}
}
我想這樣做如下:
class MyFormModel extends CFormModel {
protected $_rules = array();
public function __construct($attributes=array(), $rules=array()) {
foreach ($attributes as $i => $attr) {
$this->{$attr} = ???; // <<== This is the key here
}
// pass in array of rules as described in Yii doc for CFormModel
$this->_rules = $rules;
}
public function rules() {
return $_rules;
}
}
當調用它需要如下:
$myModelObj = new MyFormModel($attr, $rules);
其中:
$attr = array(
'username',
'rememberMe',
'password',
);
$rules = array(
array('username, password', 'required'),
array('rememberMe', 'boolean'),
array('password', 'authenticate'), // assume function authenticate defined elsewhere
);
請注意,在我試圖完成的任何文件中都沒有寫入「LoginClass」,它是在代碼中實時創建的。
這將異體我創造做這樣的東西,表格(視圖):
// based on http://www.yiiframework.com/doc/guide/1.1/en/form.view
<?php echo $wForm->textField($myModelObj,'username'); ?>
等
我想這一點,和$此 - > {$ ATTR}線與失敗:
Property "MyFormModel.username" is not defined.
實際上該行的代碼只是:
$this->{$attr};
The ???表示我並不確定要爲此分配什麼。在Yii doc示例中,他們只是將這些字段定義爲公共類變量。
我應該使用魔術方法嗎?
我試圖在這裏甚至有可能做什麼?