如何在yii2中创建一个普通的html表单?

时间:2017-02-12 14:21:36

标签: html yii2

我试过了,例如

<form id='blah' action='myActionController' method='post'>
//fields here
<input type='submit' name='submit' value='button name' />
</form>

点击按钮后,它会降落到www.mydomain.com/site/myActionController

但是,页面内容是

Bad Request (#400)
Unable to verify your data submission. 
 The above error occurred while the Web server was processing your request.

Please contact us if you think this is a server error. Thank you. 

我只是不想使用活动表格... 所以如何在不使用内置的yii的情况下在普通的html版本中进行表单 积极的形式?

3 个答案:

答案 0 :(得分:4)

您需要为要提交的提交内容添加CSRF数据。

最简单的方法是使用静态方法\yii\web\Html::beginForm()来实现这一点(并负责生成正确的表单标记)。

生成表单的代码如下:

<?= \yii\web\Html::beginForm('myActionController') ?>
<input type='submit' name='submit' value='button name'>
<?= \yii\web\Html::endForm() ?>

您当然可以关闭CSRF验证,但不建议这样做。如果没有此验证,您的简单表格将有效。

答案 1 :(得分:0)

在yii2中,如果你想要一个myActionController的链接,你应该使用这种表示法 (假设您有一个名为site的控制器和一个名为myActionController的操作)

<form id='blah' action='my-action-controller' method='post'>

//字段在这里

可能是您需要正确的网址,因为这可能对UrlHelper很有用

这样

use yii\helpers\Url;
.....

echo "<form id='blah' action='" . Url::to(['/site/my-action-controller']) . 
              "' method='post'>";

答案 2 :(得分:0)

最好的方法是克隆已经使用sendEmail函数的现有ContactForm模型,并添加您自己的属性,规则和attributeLables。在sendEmail函数上,您可以将要接收的所有必要字段包含在字符串-> setTextBody中,并使用串联,如下所示:

 public function sendEmail($email)
{
    return Yii::$app->mailer->compose()
        ->setTo($email)
        ->setFrom([$this->email => $this->name])
        ->setSubject($this->subject)
        ->setTextBody($this->name. ' ' .'has requested'. 'space here'. $this->customfield. ' etc.')
        ->send();
        }

自定义contactForm模型后,您可以在网站控制器上复制actionContact并将其作为actionIndex或其他任何形式添加到您的Form控制器中,还可以复制验证码和公共函数action()上的错误

现在,我们将在yii2中创建一个纯HTML表单,如下所示:

在我的示例中,我使用 registerForm 作为模型(请注意我如何在yii2的 id和name 字段上使用该模型来发送表单没问题

<?php $form = ActiveForm::begin(); ?>

<div class="col-md-12">
    <input type="text" id="registerform-name" placeholder="Institution's Name*" name="RegisterForm[name]" required>
</div>


<div class="col-md-12">
    <select id="registerform-institution"  name="RegisterForm[institution]">
        <option value="" disabled selected hidden>Select Institution's Type*</option>
        <option value="Secondary School">Secondary School</option>
        <option value="High School">High School</option>
        <option value="College">College</option>
        <option value="University">University</option>
    </select>
</div>

<div class="col-md-12">
    <input type="tel" id="registerform-number" placeholder="Institution's Phone Number*" name="RegisterForm[number]" required>
</div>

<div class="col-md-12">
    <input type="text" id="registerform-pname" placeholder="Principal's Name*" name="RegisterForm[pname]" required>
</div>

<div class="col-md-12">
    <input type="email" id="registerform-email" class="form-control" name="RegisterForm[email]" placeholder="Principal's eMail Address*" name="email" required>
</div>

<div class="col-md-12">
    <?= $form->field($model, 'verifyCode')->widget(Captcha::className(), ['captchaAction' => '/register/default/captcha', 'template' => '<div class="row"><div class="col-lg-4">{image}</div><div class="col-lg-8">{input}</div></div>',
    ]) ?>
</div>

<div class="form-group">
    <?= Html::submitButton('Register', ['class' => 'theme-btn theme-btn4']) ?>
</div>

回到我的模型:我具有以下属性,并且通过适当的验证等方式,我的表单发送良好:

    <?php

    namespace register\models;

    use Yii;
    use yii\base\Model;

    class RegisterForm extends Model
    {
    public $name;
    public $institution;
    public $number;
    public $pname;
    public $email;
    public $verifyCode;