Yii2创建一个不依赖于模型的表单

8

我想知道在Yii2框架中如何创建一个没有模型的表单,因为我正在创建一个Mailchimp注册表单,所以不需要模型。下面的代码生成了一个表单,但是你可以看到它使用了一个模型。

<?php $form = ActiveForm::begin(['id' => 'login-form']); ?>

<?= $form->field($model, 'title')->textInput(['maxlength' => 255]) ?>

<?php ActiveForm::end(); ?>

我还需要使用activeform吗?如果没有它,如何删除$model变量而不出现错误?


1
不知道YII,但你总可以使用普通的HTML... - Damien Pirsy
@DamienPirsy 是的,我只是在想是否可能,但正如你所说,普通的HTML就能胜任。 - con322
@DamienPirsy 这是正确的做法,但是在处理表单方面,YII2非常糟糕,几乎不可能将表单输入传递到模型中。这是不使用框架的好理由! - Sliq
3个回答

11

Yii2有一个称为DynamicModel的好东西。这个东西基本上允许你动态创建模型,以便你仍然可以使用所有ActiveForm和验证工具,但不需要专门编写整个模型类。可能会很有趣。

以下是文档中的示例:

public function actionSearch($name, $email)
{
   $model = DynamicModel::validateData(compact('name', 'email'), [
       [['name', 'email'], 'string', 'max' => 128],
       ['email', 'email'],
   ]);
   if ($model->hasErrors()) {
      // validation fails
   } else {
      // validation succeeds
   }
}

显然,这些实例也可以用于ActiveForm小部件。 然后,您可以在操作中首先运行适当的验证,然后将数据传递给MailChimp。 如果您想要在内容验证的一部分中运行HTML Purifier,那么这可能很方便。


1
关于DynamicModel的好文章,请访问http://www.yiiframework.com/wiki/759/create-form-with-dynamicmodel/。 - Ivan Buttinoni

5

使用带有活动表单的HTML输入

<?=Html::input('text','','',['class'=>'form-control'])?>

请完成您的答案。您是否建议使用HTML助手构建Mailchimp订阅表单? - MEM
@MEM 他提供了我认为是正确的答案。他还能提供什么呢?那正是你需要的小部件。 - Gogol

0

正如@DamienPirsy所建议的那样-使用plain。如果您想要使用yii2功能-请使用Class yii\helpers\BaseHtml(http://www.yiiframework.com/doc-2.0/yii-helpers-basehtml.html)。这里有所有方法可以按照您的意愿构建任何表单。然后,您可以在应用程序的任何控制器中的任何操作中操作它。但这不是真正的MVC方式。这就是Yii/Yii2建议您使用模型的原因。


谢谢你的建议/信息。那么,您建议我即使在将帖子数据直接从应用程序发送到Mailchimp列表时仍使用模型吗? - con322

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接