2016-02-08 3 views
2

я создал простую «подписаться на рассылку» форму:typo3 Extbase: проверить форму

<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> 

, как вы можете видеть, это не форма, которая основана на существующей модели, у меня нет никакого интереса в сохранении newslettersubscriptions в базу данных (они будут храниться где-то в любом случае).

Теперь в моем subscipeAction я хочу выполнить некоторую проверку. Я хочу проверить, действительно ли электронное письмо является адресом электронной почты, если его notEmpty и т. Д. Есть ли способ использовать валидаторы typo3/extbase? Если так - как?

ответ

0

да, вы можете использовать валидатор жидкости, но я хотел бы предложить вам использовать ValidationEngine

<input type="email" name="email" id="email" data-validation-engine="validate[required,custom[email]]" 
data-errormessage-value-missing="Email is required!" 
data-errormessage-custom-error="Let me give you a hint: [email protected]" 
data-errormessage="This is the fall-back error message."/> 
4

Вы можете создать специальный класс, который не является модель базы данных, но расширяет \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

в контроллере вы просто справиться с двумя действиями:

/** 
* 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 
} 
+0

Ach жаль там была ошибка в файле/имени класса - я использовал 'Subscribe' и должен быть' SubscribeForm' так просто исправить, если вы пытаются использовать фрагмент – biesior

0

Если вы хотите, чтобы проверить почтовый адрес в действии контроллера вы можете используйте класс EmailAddressValidator.

Вот ссылка: https://typo3.org/api/typo3cms/class_t_y_p_o3_1_1_c_m_s_1_1_extbase_1_1_validation_1_1_validator_1_1_email_address_validator.html#a72063d2e922edda5321b1970297eb0c3

Я думаю, что лучший способ проверить форму на стороне клиента. Пользователь может непосредственно видеть, что не так.

Для проверки формы HTML5 посмотреть здесь: https://www.sitepoint.com/client-side-form-validation-html5/

http://www.w3schools.com/html/html_form_attributes.asp