我创建了一个简单的“订阅新闻通讯”表单:
<f:form action="subscribe" method="post" name="newsletterform">
<f:form.textfield id="name" name="name" required="true" />
<f:form.textfield id="email" name="email" required="true"/>
<button type="submit">Submit</button>
</f:form>
正如您所看到的,这不是基于现有模型的表单,我没有兴趣将新闻通讯订阅保存到数据库(无论如何它们都会存储在其他地方)。
现在在我的 subscripeAction 中我想做一些表单验证。我想检查电子邮件是否确实是电子邮件地址,是否为空等。有没有办法使用typo3 / extbase 验证器?如果是这样 - 怎么办?
您可以创建不是数据库模型而是扩展的专用类\TYPO3\CMS\Extbase\DomainObject\AbstractEntity
并允许您通过 Extbase 映射类:
示例文件:typo3conf/ext/yourext/Classes/Domain/Form/SubscribeForm.php
<?php
namespace Vendor\Extname\Domain\Form;
use TYPO3\CMS\Extbase\DomainObject\AbstractEntity;
class SubscribeForm extends AbstractEntity {
/**
* @var string
* @validate NotEmpty
*/
protected $name;
/**
* @var string
* @validate NotEmpty
* @validate EmailAddress
*/
protected $email;
/** @return string */
public function getName() {
return $this->name;
}
/** @param string $name */
public function setName($name) {
$this->name = $name;
}
/** @return string */
public function getEmail() {
return $this->email;
}
/** @param string $email */
public function setEmail($email) {
$this->email = $email;
}
}
使用这样的类,您可以像公共域模型一样工作,并且它不会保存到任何内容 -https://docs.typo3.org/typo3cms/ExtbaseFluidBook/9-CrosscuttingConcerns/2-validating-domain-objects.html https://docs.typo3.org/typo3cms/ExtbaseFluidBook/9-CrosscuttingConcerns/2-validating-domain-objects.html
在你的控制器中,你只需通过两个操作来处理它:
/**
* Displays the subscription form
*
* @param \Vendor\Extname\Domain\Form\SubscribeForm|NULL $subscribeForm
* @dontvalidate $subscribeForm
*/
public function subscribeAction(\Vendor\Extname\Domain\Form\SubscribeForm $subscribeForm = NULL) {
}
/**
* Handle the valid subscription form
*/
public function subscribeSaveAction(\Vendor\Extname\Domain\Form\SubscribeForm $subscribeForm) {
// Handle the $subscribeForm
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)