您好我在表单验证后尝试获取很好的错误消息。我使用 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"
第二行是正常的,但是我无法摆脱第一行的技术通知,这绝对不是,我想向用户展示。
谢谢你的帮助!
附录:刚刚发现,这是一个“flashmessage”。 但我不想从模板中删除 ,因为它也可以作为用户的正反馈源提供信息,例如“地址已成功存储”。
附录:要生成和使用的代码进行测试:
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;
}
}
?>
答案 0 :(得分:0)
错误处理是一项非常庞大而复杂的任务,需要做出很多决定。但是,要解决您的问题,您可以将此方法添加到控制器中:
/**
* 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
}
}