Подавить сообщение об ошибке технической проверки в typo3 из уведомлений о проверке - PullRequest
0 голосов
/ 15 марта 2012

Привет. Я пытаюсь получить хорошие сообщения об ошибках после проверки формы. Я использую extbase и fluid , чтобы сгенерировать простую сущность с именем и полем электронной почты, которые требуют ввода строки. Я ничего не менял. Я просто использую сгенерированные коды из компоновщика расширений.

Если я оставлю поле пустым, я получу следующее сообщение об ошибке проверки:

An error occurred while trying to call Tx_Adresstest_Controller_AdresseController->createAction()
Validation errors for argument "newAdresse"
newAdresse: Validation errors for property "name" Validation errors for property "email"

Вторые две строки в порядке, но я не могу избавиться от технического уведомления в первой строке, которое абсолютно не то, что я хочу показать пользователю.

спасибо за вашу помощь!

Приложение: только что узнал, что это "мгновенное сообщение". Но я не хочу удалять из шаблона, поскольку он также может быть информативным в качестве источника положительной обратной связи для пользователя, например, «Адрес успешно сохранен».

Приложение: Сгенерированный и использованный код для проверки:

Шаблон New.html

<f:section name="main">
<h1>New Adresse</h1>

<f:flashMessages />

<f:form.errors>
    <div class="error">
        {error.message}
        <f:if condition="{error.propertyName}">
            <p>
                <strong>{error.propertyName}</strong>:
                <f:for each="{error.errors}" as="errorDetail">
                    {errorDetail.message}
                </f:for>
            </p>
        </f:if>
    </div>
</f:form.errors>

<f:form method="post" action="create"  name="newAdresse" object="{newAdresse}">
<label for="name">
    <f:translate key="tx_adresstest_domain_model_adresse.name" /> <span class="required">(required)</span>
</label><br />
    <f:form.textfield property="name" /><br />
<label for="email">
    <f:translate key="tx_adresstest_domain_model_adresse.email" /> <span class="required">(required)</span>
</label><br />
    <f:form.textfield property="email" /><br />
    <f:form.submit value="Create new" />
</f:form>
</f:section>

AdressController.php контроллер:

<?php
class Tx_Adresstest_Controller_AdresseController extends Tx_Extbase_MVC_Controller_ActionController {

    /**
     * adresseRepository
     *
     * @var Tx_Adresstest_Domain_Repository_AdresseRepository
     */
    protected $adresseRepository;

    /**
     * injectAdresseRepository
     *
     * @param Tx_Adresstest_Domain_Repository_AdresseRepository $adresseRepository
     * @return void
     */
    public function injectAdresseRepository(Tx_Adresstest_Domain_Repository_AdresseRepository $adresseRepository) {
        $this->adresseRepository = $adresseRepository;
    }
// ... stripped other actions ... 

    /**
     * action new
     *
     * @param $newAdresse
     * @dontvalidate $newAdresse
     * @return void
     */
    public function newAction(Tx_Adresstest_Domain_Model_Adresse $newAdresse = NULL) {
        $this->view->assign('newAdresse', $newAdresse);
    }

    /**
     * action create
     *
     * @param $newAdresse
     * @return void
     */
    public function createAction(Tx_Adresstest_Domain_Model_Adresse $newAdresse) {
        $this->adresseRepository->add($newAdresse);
        $this->flashMessageContainer->add('Your new Adresse was created.');
        $this->redirect('list');
    }

?>

Adresse.php модель:

    /**
     * name
     *
     * @var string
     * @validate NotEmpty
     */
    protected $name;

    /**
     * email
     *
     * @var string
     * @validate NotEmpty
     */
    protected $email;

    /**
     * Returns the name
     *
     * @return string $name
     */
    public function getName() {
        return $this->name;
    }

    /**
     * Sets the name
     *
     * @param string $name
     * @return void
     */
    public function setName($name) {
        $this->name = $name;
    }

    /**
     * Returns the email
     *
     * @return string $email
     */
    public function getEmail() {
        return $this->email;
    }

    /**
     * Sets the email
     *
     * @param string $email
     * @return void
     */
    public function setEmail($email) {
        $this->email = $email;
    }

}
?>

1 Ответ

0 голосов
/ 10 мая 2012

Обработка ошибок - это очень большая и сложная задача, в которой нужно принять множество решений. Однако, чтобы решить вашу непосредственную проблему, вы можете добавить этот метод в свой контроллер:

/**
 * Initialize the create action
 *
 * @return void
 */
public function initializeCreateAction() {
    $msgs = $this->flashMessageContainer->getAllMessagesAndFlush();
    foreach($msgs as $msg) {
        $oldMessage = $msg['message'];
        // edit old message here, if you want
        // $editedMessage = ...
        $this->flashMessageContainer->add($editedMessage);  
        // omit ^this if you just want to delete the message            
    }
}
...