我试过了,例如
<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版本中进行表单 积极的形式?
答案 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;