【问题标题】:Yii Cactive formsYii 活性形式
【发布时间】:2014-02-18 19:02:11
【问题描述】:

您好,我想在 YII 视图中创建一个联系表单。我正在使用CACtive 表单,但问题是它需要模型,我没有模型,我只是调用没有任何模型的视图。 下面是我的代码

$form = $this->beginWidget('CActiveForm', array(
        'id'=>'fundraising-form',
        'enableAjaxValidation'=>false,
        'clientOptions'=>array(
        'validateOnSubmit'=>true,
        'hideErrorMessage'=>true,
    ),
        'enableClientValidation'=>true,
         'focus'=>array($model,'name'),
            )); 
  echo $form->labelEx('name_of_organization');

给我错误 缺少 CActiveForm::labelEx() 的参数 2,

【问题讨论】:

  • 据我所知,在与CActiveForm交互时,您必须使用AR模型,您没有模型吗?
  • 不使用模型的原因是什么?
  • 这里不需要模型

标签: php forms yii yii-cactiverecord


【解决方案1】:

好吧,如果我猜对了,您没有任何表来存储您的数据,并且您不需要模型和数据库之间的任何交互,您只想在没有模型的情况下使用 ActiveForm 功能。这是不可能。但是有一个技巧可以解决这个问题。您可以轻松创建一个假模型并将其用于您的ActiveForm

首先,在您的模型目录中创建一个模型,但不是普通模型。如下:

class FakeModel extends CFormModel{
public $organizationName; //for example!
public $fullname; // for example!!
public $email; // for example!!!
public function rules() {
    return array(
        array('email','email'),
        array('fullname,organizationName','required')
    );
}

public function attributeLabels() {
    return array(
        'email'=>'E-Mail Address',
        'organizationName'=>'Organization Name',
        'fullname'=>'Full Name',
    );
}
}

请注意,FakeModel 扩展了 CFormModel 类。

嗯,现在您有了一个模型,就像其他 AR 的模型一样:) 您可以将此模型发送到您的 ActiveForm,甚至在您的模型中执行验证。

$fakeModel=new FakeModel();
//for validation
if($fakeModel->validate()){
 // SEND EMAIL FOR EXAMPLE
}

如您所见,您的ActiveForm数据库 之间没有交互。轻松地将您的$fakeModel 作为model(第二个参数)传递给您的CActiveForm

更新 你可能知道,真正的名字是'CFormModel'。

希望对你有帮助:)

【讨论】:

  • 做了同样的事情,创建了一个假模型:)
  • 当然,这并不是真正的假模型,而是 Yii 所说的表单模型。
  • @jmarkmurphy 你是对的。但我刚刚提到它是一个假模型,它不与 db 交互。感谢您的关注
  • 我只是想确保我们不会开始给人一种错误的印象,即模型的唯一功能是与数据库交互。模型是应用程序中为业务建模的部分,或者是应用程序要解决的问题。它处理的不仅仅是持久化,而且根据应用程序和持久化的方式,在真实模型中可能没有数据库交互。模型中的其他内容?验证规则、业务规则、算法......
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多